private bool Guardar()
        {
            //el encabezado->la agrupacion
            IAgrupacionesServicios agrupacion = AgrupacionesServiciosFactory.GetAgrupacionesServicios();

            agrupacion.AgrupacionNombre = txtNombreAgrup.Text;
            agrupacion.FechaDesde       = Utiles.Fechas.FormatFechaDDMMYYYY(txtFechaDesde.Text);
            if (txtFechaHasta.Text == "")
            {
                txtFechaHasta.Text = DateTime.Now.ToShortDateString();
            }
            agrupacion.FechaHasta   = Utiles.Fechas.FormatFechaDDMMYYYY(txtFechaHasta.Text);
            agrupacion.AgrupacionID = Utiles.Validaciones.obtieneEntero(txtAgrupacionID.Text);
            //el detalle -> los servicios
            IServiciosAgrupados servicioAgrup = ServiciosAgrupadosFactory.GetServiciosAgrupadosFactory();

            if ((agrupacionID != 0) && (txtAgrupacionID.Text == ""))          //modo alta
            {
                agrupacion.AgrupacionID = agrupacionID;
            }

            servicioAgrup.AgrupacionID = agrupacion.AgrupacionID;

            DsServiciosAgrupados ds = (DsServiciosAgrupados)Session ["DsServiciosAgrupados"];

            if (ds != null)
            {
                if (ds.Datos.Count > 0)
                {
                    if (agrupacion.Guardar(ds))
                    {
                        agrupacionID = agrupacion.AgrupacionID;
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    ((ErrorWeb)phErrores.Controls[0]).setMensaje("Debe asociar servicios");
                    return(false);
                }
            }
            else
            {
                ((ErrorWeb)phErrores.Controls[0]).setMensaje("Debe asociar servicios");
                return(false);
            }
        }
        private void butCancelar_Click(object sender, System.EventArgs e)
        {
            if ((agrupacionID != 0) && (txtAgrupacionID.Text == ""))        //modo alta de nuevos serv
            {
                //borrar la que ya se agregó
                IAgrupacionesServicios agrup = AgrupacionesServiciosFactory.GetAgrupacionesServicios();
                agrup.AgrupacionID = agrupacionID;
                agrup.Eliminar();
            }
            else if ((agrupacionID != 0) && (txtAgrupacionID.Text != ""))        //agrega nuevos a una agrupacion existente y cancela
            {
                DsServiciosAgrupados            dsBaseDatos = new DsServiciosAgrupados();
                DsServiciosAgrupados            dsSession   = new DsServiciosAgrupados();
                DsServiciosAgrupados.DatosRow[] drBaseDatos = null;
                DsServiciosAgrupados.DatosRow   drSession   = null;

                IServiciosAgrupados servicios = ServiciosAgrupadosFactory.GetServiciosAgrupadosFactory();
                servicios.AgrupacionID = agrupacionID;
                IAgrupacionesServicios agrupacion = AgrupacionesServiciosFactory.GetAgrupacionesServicios();
                agrupacion.AgrupacionID = servicios.AgrupacionID;

                if (Session ["DsServiciosNuevosAgrupados"] != null)              //solo si ha agregado algo en la ultima sesion
                {
                    dsSession = (DsServiciosAgrupados)Session ["DsServiciosNuevosAgrupados"];

                    for (int j = 0; j < dsSession.Datos.Count; j++)
                    {
                        //elimino los servicios agregados en la ultima sesion si presiono cancelar
                        //y habia agregado servicios, si no agrego nada sale

                        drSession   = (DsServiciosAgrupados.DatosRow)dsSession.Datos.Rows[j];                       //copio lo que tengo en la sesion
                        dsBaseDatos = (DsServiciosAgrupados)agrupacion.ConsultarServicios();                        //trae el detalle de lo guardado

                        //busco en el detalle el que agrego en esta session y lo elimino
                        drBaseDatos = (DsServiciosAgrupados.DatosRow[])dsBaseDatos.Datos.Select("ServicioTransporteDescrip = '" + drSession.ServicioTransporteDescrip + "'");
                        if (drBaseDatos.Length > 0)                      //agrego algo?
                        {
                            servicios.ServicioAgrupadoID = drBaseDatos[0].ServicioAgrupadoID;
                            servicios.Eliminar();
                        }
                    }
                }
            }
            Session ["DsServiciosNuevosAgrupados"] = null;
            agrupacionID = 0;
            Response.Redirect("AgrupacionesServiciosConsul.aspx");
        }
        private void dtgServiciosAgrupados_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            try
            {
                //sacarlo de la grilla solamente
                SisPackController.AdministrarGrillas.Configurar(dtgServiciosAgrupados, "ServicioAgrupadoID", 10);
                DsServiciosAgrupados            ds = new DsServiciosAgrupados();
                DsServiciosAgrupados.DatosRow[] dr = null;

                if (Session["DsServiciosAgrupados"] != null)
                {
                    ds = (DsServiciosAgrupados)Session["DsServiciosAgrupados"];
                }

                if ((e.Item.Cells[0].Text) != "&nbsp;")
                {
                    dr = (DsServiciosAgrupados.DatosRow[])ds.Datos.Select("ServicioAgrupadoID = " + e.Item.Cells[0].Text);
                }
                else if ((e.Item.Cells[2].Text) != "&nbsp;")
                {
                    dr = (DsServiciosAgrupados.DatosRow[])ds.Datos.Select("ServicioTransporteDescrip = '" + e.Item.Cells[2].Text + "'");

                    /*int indice= ddlServicios.Items.IndexOf(ddlServicios.Items.FindByValue(dr[0].ServicioTransporteDescrip));
                     * ddlServicios.Items[indice].Selected=false;*/
                }

                //tengo que eliminarlo de la bd porque debe volver a aparecer en el combo de los disponibles
                IServiciosAgrupados servicios = ServiciosAgrupadosFactory.GetServiciosAgrupadosFactory();
                //lo elimino con el id si lo tengo, (cuando viene en modo editar)

                if (e.Item.Cells[2].Text != "&nbsp;")
                {
                    if (agrupacionID != 0)
                    {
                        servicios.AgrupacionID = agrupacionID;
                        IAgrupacionesServicios agrupacion = AgrupacionesServiciosFactory.GetAgrupacionesServicios();
                        agrupacion.AgrupacionID = servicios.AgrupacionID;
                        ds = (DsServiciosAgrupados)agrupacion.ConsultarServicios();                        //trae el detalle, por si solo el encabezado no se usa
                        //Session["DsServiciosAgrupados"]=ds;
                        dr = (DsServiciosAgrupados.DatosRow[])ds.Datos.Select("ServicioTransporteDescrip = '" + e.Item.Cells[2].Text + "'");
                        servicios.ServicioAgrupadoID = dr[0].ServicioAgrupadoID;
                    }
                }
                else if ((e.Item.Cells[0].Text) != "&nbsp;")
                {
                    servicios.ServicioAgrupadoID = dr[0].ServicioAgrupadoID;
                    agrupacionID = servicios.AgrupacionID;
                }

                if (servicios.Eliminar())
                {
                    //vuelvo a llenar el combo con el servicio disponible
                    this.LlenarComboServicio();

                    //lo elimino de la grilla
                    ds.Datos.RemoveDatosRow(dr[0]);
                    Session["DsServiciosAgrupados"]        = ds;
                    dtgServiciosAgrupados.DataSource       = ds.Datos;
                    dtgServiciosAgrupados.PageSize         = 20;
                    dtgServiciosAgrupados.CurrentPageIndex = 0;
                    dtgServiciosAgrupados.DataBind();
                    //BindGrid(0);
                }
                else
                {
                    ((ErrorWeb)this.phErrores.Controls[0]).setMensaje("No se pudo eliminar la asociación");
                }
                //}
//				else //elimino una agrupacion cuando todavia no se ha guardado nada en la bd
//				{
//					//vuelvo a llenar el combo con el servicio disponible
//					this.LlenarComboServicio();
//					//lo elimino de la grilla
//					ds.Datos.RemoveDatosRow(dr[0]);
//					Session["DsServiciosAgrupados"] = ds;
//					dtgServiciosAgrupados.DataSource = ds.Datos;
//					dtgServiciosAgrupados.PageSize=20;
//					dtgServiciosAgrupados.CurrentPageIndex=0;
//					dtgServiciosAgrupados.DataBind();
//
//				}
            }
            catch (Exception ex)
            {
                ((ErrorWeb)this.phErrores.Controls[0]).setMensaje(ex.Message);
            }
        }