void cargar_viaticos()
        {
            DAL.Viaticos        viaticos       = new DAL.Viaticos();
            List <DAL.Viaticos> lista_viaticos = new List <DAL.Viaticos>();

            lista_viaticos = viaticos.obtener();

            txtViatico.DataTextField  = "Descripcion";
            txtViatico.DataValueField = "Id";

            txtViatico.DataSource = lista_viaticos;
            txtViatico.DataBind();
        }
        private void obtenerDatosFiltrados(bool todos, DAL.ItemOrden[] orden, DAL.ItemFiltro[] filtro)
        {
            int paginaActual = pagPaginador.obtenerPaginaActual();

            int tamañoPagina = pagPaginador.obtenerRegistrosMostrar();

            int registroInicio = ((paginaActual - 1) * tamañoPagina) + 1;

            int registroFin;
            if (todos)
                registroFin = -1;
            else
                registroFin = tamañoPagina * paginaActual;

            DAL.Viaticos viaticos = new DAL.Viaticos();

            //VistaTareas.Subscribe(this);

            double cantidadRegistros = 0;

            List<DAL.Viaticos> datosObtenidos = viaticos.obtenerFiltrado(filtro,
                                                   orden,
                                                   true,
                                                   registroInicio,
                                                   registroFin,
                                                   out  cantidadRegistros);
            if (viaticos.UltimoMensaje != null)
            {
                UltimoMensaje = viaticos.UltimoMensaje;
                Notify(UltimoMensaje);
                return;
            }

            ArrayList lista = new ArrayList();
            foreach (DAL.Viaticos item in datosObtenidos)
            {
                var itemLista = new
                {
                    Codigo = item.Id,
                    Descripcion = item.Descripcion,
                    Importe = item.Importe
                };
                lista.Add(itemLista);
            }

            cargarGrilla(lista);
            calcularTotalPaginas(tamañoPagina, cantidadRegistros);
            
            pagPaginador.setPaginaActual(paginaActual);
        }
        protected void grdViaticos_SelectedIndexChanged(object sender, EventArgs e)
        {
            frmSeleccionar.Visible = false;
            DAL.Viaticos viaticos = new DAL.Viaticos();
            string codigo = grdViaticos.SelectedDataKey.Value.ToString();
            List<DAL.Viaticos> datos = viaticos.obtener(codigo);
            foreach (var item in datos)
            {
                if (ViewState["ViaticoID"] != null)
                    ViewState["ViaticoID"] = item.Id;
                else
                    ViewState.Add("ViaticoID", item.Id);

                txtCodigo.Text = item.Id.ToString();
                txtDescripcion.Text = item.Descripcion;
                txtImporte.Text = item.Importe;
            }
        }
        void guardar(bool nuevo)
        {
            bool errores = false;

            if (nuevo)
            {
                DAL.Viaticos viaticos = new DAL.Viaticos();
                int registros = viaticos.obtener(txtCodigo.Text).Count;

                if (registros > 0)
                {
                    ScriptManager.RegisterStartupScript(Page, this.GetType(), "toast", DAL.Varios.crear_mensaje("La operación no pudo realizarse ya que el código ingresado existe en la base de datos!.", 3000), true);
                    errores = true;
                }
            }

            if (txtCodigo.Text == "" || txtDescripcion.Text == "")
            {
                if (txtDescripcion.Text == "") lblDescripcion.ForeColor = Color.Red;
                if (txtCodigo.Text == "") lblCodigo.ForeColor = Color.Red;
                errores = true;

                ScriptManager.RegisterStartupScript(Page, this.GetType(), "toast", DAL.Varios.crear_mensaje("Los campos señalados en rojo no pueden estar vacíos", 3000), true);
            }

            if (!errores)
            {
                lblDescripcion.ForeColor = Color.Black;

                DAL.Viaticos viaticos = new DAL.Viaticos();
                viaticos.Id = txtCodigo.Text;
                viaticos.Descripcion = txtDescripcion.Text;
                viaticos.Importe = txtImporte.Text;

                if (viaticos.Guardar(nuevo))
                    ScriptManager.RegisterStartupScript(Page, this.GetType(), "toast", DAL.Varios.crear_mensaje("Operacion realizada!", 3000), true);
                else
                    ScriptManager.RegisterStartupScript(Page, this.GetType(), "toast", DAL.Varios.crear_mensaje("Error al realizar el proceso", 3000), true);
            }

        }
 protected void btnEliminar_Click(object sender, EventArgs e)
 {
     if(ViewState["ViaticoID"]!=null)
     {
         DAL.Viaticos viaticos = new DAL.Viaticos();
         if(!viaticos.existe_en_otros_registros(ViewState["ViaticoID"].ToString()))
         {
             viaticos.borrar(ViewState["ViaticoID"].ToString());
             obtenerDatosFiltrados(false, obtenerOrdenActual(), ObtenerItemFiltro());
             limpiar();
             ScriptManager.RegisterStartupScript(Page, this.GetType(), "toast", DAL.Varios.crear_mensaje("Operacion realizada!", 3000), true);
         }
         else
         {
             ScriptManager.RegisterStartupScript(Page, this.GetType(), "toast", DAL.Varios.crear_mensaje("El viatico no pudo ser borrado ya que tiene registros relacionados", 3000), true);
         }
     }
     else
     {
         ScriptManager.RegisterStartupScript(Page, this.GetType(), "toast", DAL.Varios.crear_mensaje("Debe seleccionar un registro para poder borrarlo", 3000), true);
     }
 }