private ProductoPromocionEN InformacionDeLaPromocion(DataGridViewRow Fila)
        {
            ProductoPromocionEN oRegistroEN = new ProductoPromocionEN();

            int idProductoPromocion;

            int.TryParse(Fila.Cells["idProductoPromocion"].Value.ToString(), out idProductoPromocion);
            oRegistroEN.idProductoPromocion       = idProductoPromocion;
            oRegistroEN.oProductoEN.idProducto    = ValorLlavePrimariaEntidad;
            oRegistroEN.oProductoEN.Codigo        = CodigoProducto;
            oRegistroEN.oProductoEN.CodigoDeBarra = CodigoDeBarraDelProducto;
            oRegistroEN.oProductoEN.Nombre        = NombreDelProducto;

            decimal PrecioDelProducto;

            decimal.TryParse(Fila.Cells["PrecioDelProducto"].Value.ToString(), out PrecioDelProducto);

            oRegistroEN.PrecioDelProducto   = PrecioDelProducto;
            oRegistroEN.FechaDeInicio       = Convert.ToDateTime(Fila.Cells["FechaDeInicio"].Value.ToString());
            oRegistroEN.FechaDeFinalizacion = Convert.ToDateTime(Fila.Cells["FechaDeFinalizacion"].Value.ToString());
            oRegistroEN.Estado      = Fila.Cells["Estado"].Value.ToString();
            oRegistroEN.Descripcion = Fila.Cells["Descripcion"].Value.ToString();

            oRegistroEN.oLoginEN              = Program.oLoginEN;
            oRegistroEN.idUsuarioDeCreacion   = Program.oLoginEN.idUsuario;
            oRegistroEN.idUsuarioModificacion = Program.oLoginEN.idUsuario;
            oRegistroEN.FechaDeCreacion       = System.DateTime.Now;
            oRegistroEN.FechaDeModificacion   = System.DateTime.Now;

            return(oRegistroEN);
        }
        private ProductoPromocionEN InformacionDeLaPromocionDelProducto()
        {
            ProductoPromocionEN oRegistroEN = new ProductoPromocionEN();

            int idProductoPromocion;

            int.TryParse(txtidProductoPromocion.Text, out idProductoPromocion);

            oRegistroEN.idProductoPromocion       = idProductoPromocion;
            oRegistroEN.oProductoEN.idProducto    = ValorLlavePrimariaEntidad;
            oRegistroEN.oProductoEN.Nombre        = NombreDelProducto;
            oRegistroEN.oProductoEN.Codigo        = CodigoProducto;
            oRegistroEN.oProductoEN.CodigoDeBarra = CodigoDeBarraDelProducto;

            decimal PrecioDelProducto;

            decimal.TryParse(txtPrecioPromocional.Text, out PrecioDelProducto);
            oRegistroEN.PrecioDelProducto   = PrecioDelProducto;
            oRegistroEN.FechaDeInicio       = dtpkDesdePromocion.Value;
            oRegistroEN.FechaDeFinalizacion = dtpkHastaPromocional.Value;
            oRegistroEN.Estado      = cmbEstado.Text.Trim();
            oRegistroEN.Descripcion = txtDescripcionDeLaPromocion.Text.Trim();

            //partes generales.
            oRegistroEN.oLoginEN              = Program.oLoginEN;
            oRegistroEN.idUsuarioDeCreacion   = Program.oLoginEN.idUsuario;
            oRegistroEN.idUsuarioModificacion = Program.oLoginEN.idUsuario;
            oRegistroEN.FechaDeCreacion       = System.DateTime.Now;
            oRegistroEN.FechaDeModificacion   = System.DateTime.Now;

            return(oRegistroEN);
        }
        private DataTable InformacionDePromocionesAsociadasAlProducto()
        {
            DataTable ODatos = null;

            try
            {
                ProductoPromocionEN oRegistroEN = new ProductoPromocionEN();
                ProductoPromocionLN oRegistroLN = new ProductoPromocionLN();

                oRegistroEN.oProductoEN.idProducto = ValorLlavePrimariaEntidad;
                oRegistroEN.OrderBy = " Order By FechaDeFinalizacion desc ";

                if (oRegistroLN.ListadoPromocionesXProducto(oRegistroEN, Program.oDatosDeConexion))
                {
                    ODatos = oRegistroLN.TraerDatos();
                    return(ODatos);
                }
                else
                {
                    throw new ArgumentException(oRegistroLN.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Información de los productos asociados", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(ODatos);
            }
        }
        private string InformacionDelRegistro(ProductoPromocionEN oRegistroEN)
        {
            string Cadena = @"idProductoPromocion: {0}, idProducto: {1}, PrecioDelProducto: {2}, FechaDeInicio: {3}, FechaDeFinalizacion: {4}, Estado: {5}, idUsuarioDeCreacion: {6}, FechaDeCreacion: {7}, idUsuarioModificacion: {8}, FechaDeModificacion: {9}";

            Cadena = string.Format(Cadena, oRegistroEN.idProductoPromocion, oRegistroEN.oProductoEN.idProducto, oRegistroEN.PrecioDelProducto, oRegistroEN.FechaDeInicio, oRegistroEN.FechaDeFinalizacion, oRegistroEN.Estado, oRegistroEN.idUsuarioDeCreacion, oRegistroEN.FechaDeCreacion, oRegistroEN.idUsuarioModificacion, oRegistroEN.FechaDeModificacion);
            Cadena = Cadena.Replace(",", Environment.NewLine);
            return(Cadena);
        }
        public bool Eliminar(ProductoPromocionEN oRegistroEN, DatosDeConexionEN oDatos)
        {
            oTransaccionesAD = new TransaccionesAD();

            try
            {
                Cnn = new MySqlConnection(TraerCadenaDeConexion(oDatos));
                Cnn.Open();

                Comando             = new MySqlCommand();
                Comando.Connection  = Cnn;
                Comando.CommandType = CommandType.Text;

                Consultas           = @"Delete from ProductoPromocion Where idProductoPromocion = @idProductoPromocion;";
                Comando.CommandText = Consultas;

                Comando.Parameters.Add(new MySqlParameter("@idProductoPromocion", MySqlDbType.Int32)).Value = oRegistroEN.idProductoPromocion;

                Comando.ExecuteNonQuery();

                DescripcionDeOperacion = string.Format("El registro fue Eliminado Correctamente. {0} {1}", Environment.NewLine, InformacionDelRegistro(oRegistroEN));

                //Agregamos la Transacción....
                TransaccionesEN oTran = InformacionDelaTransaccion(oRegistroEN, "Eliminar", "Elminar Registro", "CORRECTO");
                oTransaccionesAD.Agregar(oTran, oDatos);

                return(true);
            }
            catch (Exception ex)
            {
                this.Error = ex.Message;

                DescripcionDeOperacion = string.Format("Se produjo el seguiente error: '{2}' al eliminar el registro. {0} {1} ", Environment.NewLine, InformacionDelRegistro(oRegistroEN), ex.Message);

                //Agregamos la Transacción....
                TransaccionesEN oTran = InformacionDelaTransaccion(oRegistroEN, "Eliminar", "Eliminar Registro", "ERROR");
                oTransaccionesAD.Agregar(oTran, oDatos);

                return(false);
            }
            finally
            {
                if (Cnn != null)
                {
                    if (Cnn.State == ConnectionState.Open)
                    {
                        Cnn.Close();
                    }
                }

                Cnn              = null;
                Comando          = null;
                Adaptador        = null;
                oTransaccionesAD = null;
            }
        }
 public bool ListadoPromocionesXProducto(ProductoPromocionEN oREgistroEN, DatosDeConexionEN oDatos)
 {
     if (oProductoPromocionAD.ListadoPromocionesXProducto(oREgistroEN, oDatos))
     {
         Error = string.Empty;
         return(true);
     }
     else
     {
         Error = oProductoPromocionAD.Error;
         return(false);
     }
 }
 public bool ValidarSiElRegistroEstaVinculado(ProductoPromocionEN oREgistroEN, DatosDeConexionEN oDatos, string TipoDeOperacion)
 {
     if (oProductoPromocionAD.ValidarSiElRegistroEstaVinculado(oREgistroEN, oDatos, TipoDeOperacion))
     {
         Error = oProductoPromocionAD.Error;
         return(true);
     }
     else
     {
         Error = string.Empty;
         return(false);
     }
 }
        public bool ListadoParaReportes(ProductoPromocionEN oRegistroEN, DatosDeConexionEN oDatos)
        {
            try
            {
                Cnn = new MySqlConnection(TraerCadenaDeConexion(oDatos));
                Cnn.Open();

                Comando             = new MySqlCommand();
                Comando.Connection  = Cnn;
                Comando.CommandType = CommandType.Text;

                Consultas           = string.Format(@"select idProductoPromocion, ppm.idProducto, ppm.PrecioDelProducto, 
                ppm.FechaDeInicio, ppm.FechaDeFinalizacion, ppm.Estado, 
                ppm.idUsuarioDeCreacion, ppm.FechaDeCreacion, u.Nombre as 'UsuarioDeCreacion',
                ppm.idUsuarioModificacion, ppm.FechaDeModificacion, u1.Nombre as 'UsuarioDeModificacion'
                from productopromocion as ppm
                inner join usuario as u on u.idUsuario = ppm.idUsuarioDeCreacion
                left join usuario as u1 on u1.idUsuario = ppm.idUsuarioModificacion
                Where idProductoPromocion > 0 {0} {1} ", oRegistroEN.Where, oRegistroEN.OrderBy);
                Comando.CommandText = Consultas;

                Adaptador = new MySqlDataAdapter();
                DT        = new DataTable();

                Adaptador.SelectCommand = Comando;
                Adaptador.Fill(DT);

                return(true);
            }
            catch (Exception ex)
            {
                this.Error = ex.Message;

                return(false);
            }
            finally
            {
                if (Cnn != null)
                {
                    if (Cnn.State == ConnectionState.Open)
                    {
                        Cnn.Close();
                    }
                }

                Cnn       = null;
                Comando   = null;
                Adaptador = null;
            }
        }
        public bool ListadoPromocionesXProducto(ProductoPromocionEN oRegistroEN, DatosDeConexionEN oDatos)
        {
            try
            {
                Cnn = new MySqlConnection(TraerCadenaDeConexion(oDatos));
                Cnn.Open();

                Comando             = new MySqlCommand();
                Comando.Connection  = Cnn;
                Comando.CommandType = CommandType.Text;

                Consultas           = string.Format(@"Select idProductoPromocion, idProducto, PrecioDelProducto, FechaDeInicio,
                 FechaDeFinalizacion, Estado, Descripcion
                from productopromocion 
                where idProductoPromocion > 0 and idProducto = {0} {1} ", oRegistroEN.oProductoEN.idProducto, oRegistroEN.OrderBy);
                Comando.CommandText = Consultas;

                Adaptador = new MySqlDataAdapter();
                DT        = new DataTable();

                Adaptador.SelectCommand = Comando;
                Adaptador.Fill(DT);

                return(true);
            }
            catch (Exception ex)
            {
                this.Error = ex.Message;

                return(false);
            }
            finally
            {
                if (Cnn != null)
                {
                    if (Cnn.State == ConnectionState.Open)
                    {
                        Cnn.Close();
                    }
                }

                Cnn       = null;
                Comando   = null;
                Adaptador = null;
            }
        }
        private TransaccionesEN InformacionDelaTransaccion(ProductoPromocionEN oProductoPromocion, String TipoDeOperacion, String Descripcion, String Estado)
        {
            TransaccionesEN oRegistroEN = new TransaccionesEN();

            oRegistroEN.idregistro      = oProductoPromocion.idProductoPromocion;
            oRegistroEN.Modelo          = "ProductoPromocionAD";
            oRegistroEN.Modulo          = "Producto";
            oRegistroEN.Tabla           = "ProductoPromocion";
            oRegistroEN.tipodeoperacion = TipoDeOperacion;
            oRegistroEN.Estado          = Estado;
            oRegistroEN.ip                    = oProductoPromocion.oLoginEN.NumeroIP;
            oRegistroEN.idusuario             = oProductoPromocion.oLoginEN.idUsuario;
            oRegistroEN.idusuarioaprueba      = oProductoPromocion.oLoginEN.idUsuario;
            oRegistroEN.descripciondelusuario = DescripcionDeOperacion;
            oRegistroEN.descripcioninterna    = Descripcion;
            oRegistroEN.NombreDelEquipo       = oProductoPromocion.oLoginEN.NombreDelComputador;

            return(oRegistroEN);
        }
        public bool Eliminar(ProductoPromocionEN oREgistroEN, DatosDeConexionEN oDatos)
        {
            if (string.IsNullOrEmpty(oREgistroEN.idProductoPromocion.ToString()) || oREgistroEN.idProductoPromocion == 0)
            {
                this.Error = @"Se debe de seleccionar un elemento de la lista";
                return(false);
            }

            if (oProductoPromocionAD.Eliminar(oREgistroEN, oDatos))
            {
                Error = string.Empty;
                return(true);
            }
            else
            {
                Error = oProductoPromocionAD.Error;
                return(false);
            }
        }
        private void Actualizar()
        {
            try
            {
                if (LosDatosIngresadosSonCorrectos())
                {
                    ProductoPromocionEN oRegistroEN = InformacionDeLaPromocionDelProducto();
                    ProductoPromocionLN oRegistroLN = new ProductoPromocionLN();

                    if (oRegistroLN.ValidarFechaDelRegistro(oRegistroEN, Program.oDatosDeConexion, "ACTUALIZAR"))
                    {
                        MessageBox.Show(oRegistroLN.Error, "Actualizar información", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    if (oRegistroLN.Actualizar(oRegistroEN, Program.oDatosDeConexion))
                    {
                        if (chkCerrarVentana.Checked == true)
                        {
                            this.Close();
                        }
                        else
                        {
                            CrearyYPoblarColumnasDGVPromociones();
                            LimpiarControles();
                        }
                    }
                    else
                    {
                        throw new ArgumentException(oRegistroLN.Error);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Guardar el registro", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        public bool Actualizar(ProductoPromocionEN oRegistroEN, DatosDeConexionEN oDatos)
        {
            oTransaccionesAD = new TransaccionesAD();

            try
            {
                Cnn = new MySqlConnection(TraerCadenaDeConexion(oDatos));
                Cnn.Open();

                Comando             = new MySqlCommand();
                Comando.Connection  = Cnn;
                Comando.CommandType = CommandType.StoredProcedure;

                Consultas = @"ActualizarPromocionDelProducto";

                Comando.CommandText = Consultas;

                Comando.Parameters.Add(new MySqlParameter("@idProductoPromocion_", MySqlDbType.Int32)).Value    = oRegistroEN.idProductoPromocion;
                Comando.Parameters.Add(new MySqlParameter("@idProducto_", MySqlDbType.Int32)).Value             = oRegistroEN.oProductoEN.idProducto;
                Comando.Parameters.Add(new MySqlParameter("@PrecioDelProducto_", MySqlDbType.Decimal)).Value    = oRegistroEN.PrecioDelProducto;
                Comando.Parameters.Add(new MySqlParameter("@FechaDeInicio_", MySqlDbType.DateTime)).Value       = oRegistroEN.FechaDeInicio;
                Comando.Parameters.Add(new MySqlParameter("@FechaDeFinalizacion_", MySqlDbType.DateTime)).Value = oRegistroEN.FechaDeFinalizacion;
                Comando.Parameters.Add(new MySqlParameter("@Estado_", MySqlDbType.VarChar, oRegistroEN.Estado.Trim().Length)).Value = oRegistroEN.Estado.Trim();
                Comando.Parameters.Add(new MySqlParameter("@idUsuarioModificacion_", MySqlDbType.Int32)).Value = oRegistroEN.idUsuarioModificacion;

                Comando.ExecuteNonQuery();

                DescripcionDeOperacion = string.Format("El registro fue Actualizado Correctamente. {0} {1}", Environment.NewLine, InformacionDelRegistro(oRegistroEN));

                //Agregamos la Transacción....
                TransaccionesEN oTran = InformacionDelaTransaccion(oRegistroEN, "Actualizar", "Actualizar Registro", "CORRECTO");
                oTransaccionesAD.Agregar(oTran, oDatos);

                return(true);
            }
            catch (Exception ex)
            {
                this.Error = ex.Message;

                DescripcionDeOperacion = string.Format("Se produjo el seguiente error: '{2}' al actualizar el registro. {0} {1} ", Environment.NewLine, InformacionDelRegistro(oRegistroEN), ex.Message);

                //Agregamos la Transacción....
                TransaccionesEN oTran = InformacionDelaTransaccion(oRegistroEN, "Actualizar", "Actualizar Registro", "ERROR");
                oTransaccionesAD.Agregar(oTran, oDatos);

                return(false);
            }
            finally
            {
                if (Cnn != null)
                {
                    if (Cnn.State == ConnectionState.Open)
                    {
                        Cnn.Close();
                    }
                }

                Cnn              = null;
                Comando          = null;
                Adaptador        = null;
                oTransaccionesAD = null;
            }
        }
        public bool ValidarFechaDelRegistro(ProductoPromocionEN oRegistroEN, DatosDeConexionEN oDatos, string TipoDeOperacion)
        {
            oTransaccionesAD = new TransaccionesAD();

            try
            {
                Cnn = new MySqlConnection(TraerCadenaDeConexion(oDatos));
                Cnn.Open();

                Comando             = new MySqlCommand();
                Comando.Connection  = Cnn;
                Comando.CommandType = CommandType.Text;

                switch (TipoDeOperacion.Trim().ToUpper())
                {
                case "AGREGAR":

                    /*Consultas = @"SELECT CASE WHEN EXISTS(SELECT idProductoPromocion FROM productopromocion where (SoloFecha(FechaDeInicio) >= SoloFecha(@FechaDeInicio) and SoloFecha(FechaDeInicio) <= SoloFecha(@FechaDeFinalizacion))
                     * or (SoloFecha(FechaDeFinalizacion) >= SoloFecha(@FechaDeInicio) and SoloFecha(FechaDeFinalizacion) <= SoloFecha(@FechaDeFinalizacion)) and idProducto = @idProducto) THEN 1 ELSE 0 END AS 'RES'";
                     * Comando.Parameters.Add(new MySqlParameter("@idProducto", MySqlDbType.Int32)).Value = oRegistroEN.oProductoEN.idProducto;
                     * Comando.Parameters.Add(new MySqlParameter("@FechaDeInicio", MySqlDbType.DateTime)).Value = oRegistroEN.FechaDeInicio;
                     * Comando.Parameters.Add(new MySqlParameter("@FechaDeFinalizacion", MySqlDbType.DateTime)).Value = oRegistroEN.FechaDeFinalizacion;*/

                    Consultas = @"SELECT CASE WHEN EXISTS(SELECT idProductoPromocion FROM productopromocion where (@FechaDeInicio between FechaDeInicio and FechaDeFinalizacion) or
(@FechaDeFinalizacion between FechaDeInicio and FechaDeFinalizacion) and idProducto = @idProducto) THEN 1 ELSE 0 END AS 'RES'";
                    Comando.Parameters.Add(new MySqlParameter("@idProducto", MySqlDbType.Int32)).Value             = oRegistroEN.oProductoEN.idProducto;
                    Comando.Parameters.Add(new MySqlParameter("@FechaDeInicio", MySqlDbType.DateTime)).Value       = oRegistroEN.FechaDeInicio;
                    Comando.Parameters.Add(new MySqlParameter("@FechaDeFinalizacion", MySqlDbType.DateTime)).Value = oRegistroEN.FechaDeFinalizacion;

                    break;

                case "ACTUALIZAR":

                    Consultas = @"SELECT CASE WHEN EXISTS(SELECT idProductoPromocion FROM productopromocion where (SoloFecha(FechaDeInicio) >= SoloFecha(@FechaDeInicio) and SoloFecha(FechaDeInicio) <= SoloFecha(@FechaDeFinalizacion)) 
or (SoloFecha(FechaDeFinalizacion) >= SoloFecha(@FechaDeInicio) and SoloFecha(FechaDeFinalizacion) <= SoloFecha(@FechaDeFinalizacion)) and idProducto = @idProducto and idProductoPromocion <> @idProductoPromocion) THEN 1 ELSE 0 END AS 'RES'";
                    Comando.Parameters.Add(new MySqlParameter("@idProducto", MySqlDbType.Int32)).Value             = oRegistroEN.oProductoEN.idProducto;
                    Comando.Parameters.Add(new MySqlParameter("@idProductoPromocion", MySqlDbType.Int32)).Value    = oRegistroEN.idProductoPromocion;
                    Comando.Parameters.Add(new MySqlParameter("@FechaDeInicio", MySqlDbType.DateTime)).Value       = oRegistroEN.FechaDeInicio;
                    Comando.Parameters.Add(new MySqlParameter("@FechaDeFinalizacion", MySqlDbType.DateTime)).Value = oRegistroEN.FechaDeFinalizacion;
                    break;

                default:
                    throw new ArgumentException("La aperación solicitada no esta disponible");
                }

                Comando.CommandText = Consultas;

                Adaptador = new MySqlDataAdapter();
                DT        = new DataTable();

                Adaptador.SelectCommand = Comando;
                Adaptador.Fill(DT);

                if (Convert.ToInt32(DT.Rows[0]["RES"].ToString()) > 0)
                {
                    DescripcionDeOperacion = string.Format("Ya existe información de la Fecha del Registro dentro de nuestro sistema: {0} {1}", Environment.NewLine, InformacionDelRegistro(oRegistroEN));
                    this.Error             = DescripcionDeOperacion;
                    return(true);
                }

                return(false);
            }
            catch (Exception ex)
            {
                this.Error = ex.Message;

                DescripcionDeOperacion = string.Format("Se produjo el seguiente error: '{2}' al validar el registro. {0} {1} ", Environment.NewLine, InformacionDelRegistro(oRegistroEN), ex.Message);

                //Agregamos la Transacción....
                TransaccionesEN oTran = InformacionDelaTransaccion(oRegistroEN, "VALIDAR", "REGISTRO DUPLICADO DENTRO DE LA BASE DE DATOS", "ERROR");
                oTransaccionesAD.Agregar(oTran, oDatos);

                return(false);
            }
            finally
            {
                if (Cnn != null)
                {
                    if (Cnn.State == ConnectionState.Open)
                    {
                        Cnn.Close();
                    }
                }

                Cnn              = null;
                Comando          = null;
                Adaptador        = null;
                oTransaccionesAD = null;
            }
        }
        public bool ValidarSiElRegistroEstaVinculado(ProductoPromocionEN oRegistroEN, DatosDeConexionEN oDatos, string TipoDeOperacion)
        {
            oTransaccionesAD = new TransaccionesAD();

            try
            {
                Cnn = new MySqlConnection(TraerCadenaDeConexion(oDatos));
                Cnn.Open();

                Comando             = new MySqlCommand();
                Comando.Connection  = Cnn;
                Comando.CommandType = CommandType.StoredProcedure;
                Comando.CommandText = "ValidarSiElRegistroEstaVinculado";

                Comando.Parameters.Add(new MySqlParameter("@CampoABuscar_", MySqlDbType.VarChar, 200)).Value = "idProductoPromocion";
                Comando.Parameters.Add(new MySqlParameter("@ValorCampoABuscar", MySqlDbType.Int32)).Value    = oRegistroEN.idProductoPromocion;
                Comando.Parameters.Add(new MySqlParameter("@ExcluirTabla_", MySqlDbType.VarChar, 200)).Value = string.Empty;

                Adaptador = new MySqlDataAdapter();
                DT        = new DataTable();

                Adaptador.SelectCommand = Comando;
                Adaptador.Fill(DT);

                if (DT.Rows[0].ItemArray[0].ToString().ToUpper() == "NINGUNA".ToUpper())
                {
                    return(false);
                }
                else
                {
                    this.Error             = String.Format("La Operación: '{1}', {0} no se puede completar por que el registro: {0} '{2}', {0} se encuentra asociado con: {0} {3}", Environment.NewLine, TipoDeOperacion, InformacionDelRegistro(oRegistroEN), oTransaccionesAD.ConvertirValorDeLaCadena(DT.Rows[0].ItemArray[0].ToString()));
                    DescripcionDeOperacion = this.Error;

                    //Agregamos la Transacción....
                    TransaccionesEN oTran = InformacionDelaTransaccion(oRegistroEN, "VALIDAR", "VALIDAR SI EL REGISTRO ESTA VINCULADO", "CORRECTO");
                    oTransaccionesAD.Agregar(oTran, oDatos);

                    return(true);
                }
            }
            catch (Exception ex)
            {
                this.Error = ex.Message;

                DescripcionDeOperacion = string.Format("Se produjo el seguiente error: '{2}' al validar el registro. {0} {1} ", Environment.NewLine, InformacionDelRegistro(oRegistroEN), ex.Message);

                //Agregamos la Transacción....
                TransaccionesEN oTran = InformacionDelaTransaccion(oRegistroEN, "VALIDAR", "VALIDAR SI EL REGISTRO ESTA VINCULADO", "ERROR");
                oTransaccionesAD.Agregar(oTran, oDatos);

                return(false);
            }
            finally
            {
                if (Cnn != null)
                {
                    if (Cnn.State == ConnectionState.Open)
                    {
                        Cnn.Close();
                    }
                }

                Cnn              = null;
                Comando          = null;
                Adaptador        = null;
                oTransaccionesAD = null;
            }
        }
        private void Eliminar()
        {
            try
            {
                if (dgvListar.Rows.Count > 0)
                {
                    if (EvaluarDataGridView(dgvListar))
                    {
                        string Mensaje = DescripcionDetallaDGV(dgvListar);
                        MessageBox.Show(Mensaje, "Registros a procesar", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        int RowsProcesar = dgvListar.Rows.Count;

                        if (RowsProcesar > 0)
                        {
                            int indice = 0;
                            int TotalDeFilasMarcadasParaEliminar = TotalDeFilasMarcadas(dgvListar, "Eliminar");
                            //Aqui Volvemos dinamica El codigo poniendo el valor de la llave primaria
                            string NombreLavePrimariaDetalle = "idProductoPromocion";

                            while (indice <= dgvListar.Rows.Count - 1)
                            {
                                DataGridViewRow Fila = dgvListar.Rows[indice];

                                int ValorDelaLLavePrimaria;

                                int.TryParse(Fila.Cells[NombreLavePrimariaDetalle].Value.ToString(), out ValorDelaLLavePrimaria);
                                Boolean Eliminar = Convert.ToBoolean(Fila.Cells["Eliminar"].Value);

                                if (ValorDelaLLavePrimaria == 0 && Eliminar == false)
                                {
                                    indice++;
                                    continue;
                                }

                                ProductoPromocionEN oRegistroEN = InformacionDeLaPromocion(Fila);
                                ProductoPromocionLN oRegistroLN = new ProductoPromocionLN();

                                string Operacion = "";

                                //El orden es importante porque si un usuario agrego una nueva persona pero lo marco para eliminar, no hacemos nada, solo lo quitamos de la lista.
                                if (ValorDelaLLavePrimaria == 0 && Eliminar == true)
                                {
                                    Operacion = "ELIMINAR FILA EN GRILLA";
                                }
                                //VALIDAREMOS PARA PODER ELIMINAR EL REGISTRO....
                                else if (ValorDelaLLavePrimaria > 0 && Eliminar == true)
                                {
                                    Operacion = "ELIMINAR";
                                }

                                else if (ValorDelaLLavePrimaria >= 0 && Eliminar == false)
                                {
                                    Operacion = "NINGUNA";
                                }

                                //Validaciones
                                if (Operacion == "ELIMINAR FILA EN GRILLA")
                                {
                                    dgvListar.Rows.Remove(Fila);
                                    if (dgvListar.RowCount <= 0)
                                    {
                                        indice++;
                                    }
                                    continue;
                                }

                                if (Operacion == "NINGUNA")
                                {
                                    indice++;
                                    continue;
                                }

                                if (Operacion == "ELIMINAR")
                                {
                                    if (oRegistroLN.Eliminar(oRegistroEN, Program.oDatosDeConexion))
                                    {
                                        dgvListar.Rows.Remove(Fila);
                                        oRegistroEN = null;
                                        oRegistroLN = null;
                                        if (dgvListar.RowCount <= 0)
                                        {
                                            indice++;
                                        }
                                        continue;
                                    }
                                    else
                                    {
                                        this.Cursor = Cursors.Default;
                                        throw new ArgumentException(oRegistroLN.Error);
                                    }
                                }
                            }
                        }
                    }
                }
            }catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Eliminar", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }