protected void grdDatosAdicionales_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                string eCommandNameUpper           = e.CommandName.ToUpper();
                int    index                       = Convert.ToInt32(e.CommandArgument);
                DatoAdicionalAnexoBO datoAdicional = DatosAdicionales[index];
                if (eCommandNameUpper == "PAGE" || eCommandNameUpper == "SORT")
                {
                    return;
                }
                switch (eCommandNameUpper)
                {
                case "CMDELIMINAR":
                    Presentador.EliminarDatoAdicional(datoAdicional);
                    break;

                case "CMDEDITAR":
                    Presentador.DesplegarEditarDatoAdicional(datoAdicional);
                    break;

                case "CMDDETALLES":
                    Presentador.DesplegarConsultarDatoAdicional(datoAdicional);
                    break;

                default:
                    throw new Exception("La operación solicitada no esta permitida en este modulo.");
                }
            }
            catch (Exception ex)
            {
                MostrarMensaje("Inconsistencias al presentar la información", ETipoMensajeIU.ERROR, NombreClase + ".grdDatosAdicionales_RowCommand: " + ex.Message);
            }
        }
 /// <summary>
 /// Despleiga y configura el detalle de un dato Adicional en Modo Consultar
 /// </summary>
 /// <param name="datoConsultar"></param>
 public void DesplegarConsultarDatoAdicional(DatoAdicionalAnexoBO datoConsultar)
 {
     DatosAInterfazUsuario(datoConsultar);
     vista.HabilitarAgregar(false);
     vista.HabilitarEditar(false);
     vista.HabilitarCampos(false);
 }
 /// <summary>
 /// Despliega el Dato Adicional en el Detalle
 /// </summary>
 /// <param name="datoAdicional"></param>
 internal void DatosAInterfazUsuario(DatoAdicionalAnexoBO datoAdicional)
 {
     vista.Detalle_DatoAdicionalID = datoAdicional.DatoAdicionalID;
     vista.Detalle_Descripcion     = datoAdicional.Descripcion;
     vista.Detalle_EsObservacion   = datoAdicional.EsObservacion;
     vista.Detalle_Titulo          = datoAdicional.Titulo;
 }
        /// <summary>
        /// Elimina un Dato Adicional de la Lista de Datos Adicionales
        /// </summary>
        /// <param name="datoEliminar">Dato Adicional a Eliminar</param>
        public void EliminarDatoAdicional(DatoAdicionalAnexoBO datoEliminar)
        {
            try {
                // Buscar el Dato Adicional en el Listado
                DatoAdicionalAnexoBO datoAdicionalEncontrado = vista.DatosAdicionales.Find(dato => dato.DatoAdicionalID == datoEliminar.DatoAdicionalID);

                if (datoAdicionalEncontrado != null)
                {
                    List <DatoAdicionalAnexoBO> Lista = new List <DatoAdicionalAnexoBO>(vista.DatosAdicionales);
                    Lista.Remove(datoAdicionalEncontrado);

                    vista.DatosAdicionales = Lista;

                    InicializarDetalle();
                }
                else
                {
                    vista.MostrarMensaje("El Dato Adicional no se encuentra o ha sido removido previamente.", ETipoMensajeIU.ADVERTENCIA);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(NombreClase + ".EliminarDatoAdicional: " + ex.Message, ex);
            }
        }
        /// <summary>
        /// Actualiza un Dato Adicional dentro del Listado de Datos Adicionales
        /// </summary>
        public void ActualizarDatoAdicional()
        {
            try
            {
                if (vista.Detalle_DatoAdicionalID == null)
                {
                    throw new Exception("El Dato Adicional a Editar no cuenta con Identificador.");
                }

                string mensaje = ValidarDatos();

                if (string.IsNullOrEmpty(mensaje))
                {
                    // Validar que no exista un dato adicional con los mismos datos.
                    DatoAdicionalAnexoBO datoAdicionalRepetido = vista.DatosAdicionales.Find(dato =>
                                                                                             dato.EsObservacion == vista.Detalle_EsObservacion &&
                                                                                             String.Compare(((dato.Titulo != null) ? dato.Titulo.ToUpper() : string.Empty), ((vista.Detalle_Titulo != null) ? vista.Detalle_Titulo.ToUpper() : string.Empty), StringComparison.Ordinal) == 0 &&
                                                                                             String.Compare(dato.Descripcion.ToUpper(), vista.Detalle_Descripcion.ToUpper(), StringComparison.Ordinal) == 0 &&
                                                                                             dato.DatoAdicionalID != vista.Detalle_DatoAdicionalID);

                    if (datoAdicionalRepetido == null)
                    {
                        // Obtener la Información del Dato Adicional de la Interfaz
                        DatoAdicionalAnexoBO NuevoDatoAdicionalAnexoBO = InterfazUsuarioADatos();

                        DatoAdicionalAnexoBO datoActualizable = vista.DatosAdicionales.Find(dato => dato.DatoAdicionalID == NuevoDatoAdicionalAnexoBO.DatoAdicionalID);

                        datoActualizable.DatoAdicionalID = NuevoDatoAdicionalAnexoBO.DatoAdicionalID;
                        datoActualizable.EsObservacion   = NuevoDatoAdicionalAnexoBO.EsObservacion;
                        datoActualizable.Descripcion     = NuevoDatoAdicionalAnexoBO.Descripcion;
                        datoActualizable.Titulo          = NuevoDatoAdicionalAnexoBO.Titulo;


                        // Agregar el nuevo dato Adicional
                        List <DatoAdicionalAnexoBO> Lista = new List <DatoAdicionalAnexoBO>(vista.DatosAdicionales);
                        vista.DatosAdicionales = Lista;

                        // Cerrar el Dialogo
                        InicializarDetalle();
                    }
                    else
                    {
                        vista.MostrarMensaje("No puede actualizar el Dato Adicional debido a que existe uno con la misma información.", ETipoMensajeIU.ADVERTENCIA);
                    }
                }
                else
                {
                    vista.MostrarMensaje(mensaje, ETipoMensajeIU.ADVERTENCIA);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(NombreClase + ".ActualizarDatoAdicional: " + ex.Message, ex);
            }
        }
        /// <summary>
        /// Agrega un nuevo Dato Adicional al Listado de Datos Adicionales
        /// </summary>
        public void AgregarDatoAdicional()
        {
            try
            {
                string mensaje = ValidarDatos();

                if (string.IsNullOrEmpty(mensaje))
                {
                    // Validar que no exista un dato adicional con los mismos datos.
                    DatoAdicionalAnexoBO datoAdicionalRepetido = vista.DatosAdicionales.Find(dato => dato.EsObservacion == vista.Detalle_EsObservacion && String.Compare(((dato.Titulo != null)?dato.Titulo.ToUpper():string.Empty), ((vista.Detalle_Titulo != null)?vista.Detalle_Titulo.ToUpper(): string.Empty), StringComparison.Ordinal) == 0 && String.Compare(dato.Descripcion.ToUpper(), vista.Detalle_Descripcion.ToUpper(), StringComparison.Ordinal) == 0);

                    if (datoAdicionalRepetido == null)
                    {
                        // Calcular el Maximo DatoAdicionalID
                        int UltimoDatoAdicionalID = 0;

                        if (vista.DatosAdicionales.Count > 0)
                        {
                            UltimoDatoAdicionalID = vista.DatosAdicionales.Max(dato => (dato.DatoAdicionalID != null) ? dato.DatoAdicionalID.Value : 0);
                        }

                        vista.Detalle_DatoAdicionalID = ++UltimoDatoAdicionalID;

                        // Obtener la Información del Dato Adicional de la Interfaz
                        DatoAdicionalAnexoBO NuevoDatoAdicionalAnexoBO = InterfazUsuarioADatos();

                        // Agregar el nuevo dato Adicional
                        List <DatoAdicionalAnexoBO> Lista = new List <DatoAdicionalAnexoBO>(vista.DatosAdicionales);
                        Lista.Add(NuevoDatoAdicionalAnexoBO);
                        vista.DatosAdicionales = Lista;

                        // Cerrar el Dialogo
                        LimpiarDetalle();
                    }
                    else
                    {
                        vista.MostrarMensaje("No puede agregar el Dato Adicional debido a que existe uno con la misma información.", ETipoMensajeIU.ADVERTENCIA);
                    }
                }
                else
                {
                    vista.MostrarMensaje(mensaje, ETipoMensajeIU.ADVERTENCIA);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(NombreClase + ".AgregarDatoAdicional: " + ex.Message, ex);
            }
        }