none
poner valor en columna datagridview c# segun condicion de otra columna RRS feed

  • Pregunta

  • Estimada Comunidad,


    Estoy llenando un datagridview de winforms usando la propiedad DataSource, quiero llenar una columna segun la condicion que tenga en mi lista generica o segun la columna datagridview.

    A continuacion mi explicacion

    Clase de Capa Data

            public static List<RECLAMOS> GetListReclamosByClienteRamo(int codigoCliente, int codigoRamo)
            {
                using (DBEntities ctx = new DBEntities())
                {
                    var query = (from rec in ctx.RECLAMOS
                                 join cli in ctx.CLIENTES on rec.CLI_CODIGO equals cli.CLI_CODIGO
                                 join ase in ctx.ASEGURADORAS on rec.ASE_CODIGO equals ase.ASE_CODIGO
                                 join ram in ctx.RAMOS on rec.RAMO_CODIGO equals ram.RAMO_CODIGO
                                 join eje in ctx.EJECUTIVOS on rec.EJE_CODIGO equals eje.EJE_CODIGO
                                 where rec.CLI_CODIGO == codigoCliente
                                 && rec.RAMO_CODIGO == codigoRamo
                                 orderby rec.RECL_NUMERO descending
                                 select new { rec, cli, ase, ram, eje }).ToList().Select(k => new RECLAMOS()
                                 {
                                     RECL_NUMERO = k.rec.RECL_NUMERO,
                                     CLI_CODIGO = k.rec.CLI_CODIGO,
                                     POLI_CODIGO = k.rec.POLI_CODIGO.ToString().Trim(),
                                     POLI_FCH_VIGI = k.rec.POLI_FCH_VIGI,
                                     POLI_FCH_VIGF = k.rec.POLI_FCH_VIGF,
                                     ASE_CODIGO = k.rec.ASE_CODIGO,
                                     RAMO_CODIGO = k.rec.RAMO_CODIGO,
                                     RECL_FCH_SIN = k.rec.RECL_FCH_SIN,
                                     RECL_FCH_ASE = k.rec.RECL_FCH_ASE,
                                     RECL_FCH_BRO = k.rec.RECL_FCH_BRO,
                                     RECL_FCH_PAG = k.rec.RECL_FCH_PAG,
                                     RECL_TIP_SIN = k.rec.RECL_TIP_SIN,
                                     RECL_VAL_RES = k.rec.RECL_VAL_RES,
                                     RECL_VAL_ASEG = k.rec.RECL_VAL_ASEG,
                                     RECL_VAL_RECL = k.rec.RECL_VAL_RECL,
                                     RECL_VAL_PAG = k.rec.RECL_VAL_PAG,
                                     RECL_VAL_DED = k.rec.RECL_VAL_DED,
                                     RECL_ESTADO = k.rec.RECL_ESTADO,
                                     CLIENTES = k.cli,
                                     ASEGURADORAS = k.ase,
                                     RAMOS = k.ram,
                                     EJECUTIVOS = k.eje
                                 });

                    return query.ToList();
                }
            }

    Clase Capa Negocio

            public static List<RECLAMOS> GetListReclamosByClienteRamo(int codigoCliente, int codigoRamo)
            {
                return DReclamos.GetListReclamosByClienteRamo(codigoCliente, codigoRamo);
            }

    Capa Presentacion

            private void LlenarDataGridViewReclamos(int codigoCliente, int codigoRamo)
            {
                dgvReclamos.AutoGenerateColumns = false;
                dgvReclamos.DataSource = NReclamos.GetListReclamosByClienteRamo(codigoCliente, codigoRamo);
            }

    entonces eseo llenar la columna que esta en color amarillo segun la siguiente condicion

    SI  RECL_ESTADO es igual a "A" o "E" entonces GastosIncurridos = RECL_VAL_RES sino GastosIncurridos = RECL_VAL_PAG

    De la misma manera no deseo mostrar en la columna Estado la letra "A" sino la palabra "PENDIENTE", si fuese "L" Liquidado y asi sucesivamente.

    En que evento lo puedo manejar??

    O debo condicionar esto  mi capa de Datos con alguna entidad de transporte ya todo calculado??

    De antemano les quedo muy agradecido por sus amables atenciones.

    Saludos

    Guivan


    miércoles, 24 de abril de 2019 18:34

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te hago la recomendación de ingresar al siguiente enlace en donde puedes encontrar una posible solución para tu problema.

    https://social.msdn.microsoft.com/Forums/es-ES/a279072f-8940-4665-9f7d-0fe798236ce1/poner-valores-a-columnas-en-datagridview-automaticamente?forum=vbes

    Gracias por usar los foros de MSDN.

    Carlos Ruiz
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    miércoles, 24 de abril de 2019 19:42
  • Hola Carlos,

    Hice las pruebas y no funciona, porque el evento CellContentClick se dispara cuando una accion sobre el datagridview, y lo que deseo es que cuando se este llenado el datagriview debe haber algun evento que se dispare.

    Ejemplo:

    dgvReclamos.DataSource = NReclamos.GetListReclamosByClienteRamo(codigoCliente, codigoRamo);

    Si cargo de manera manual no tengo problema por puedo manejar cada propiedad a mi antojo, Ejemplo que funciona bien

            private void LlenarDataGridViewReclamos(int codigoCliente, int codigoRamo)
            {
                string estado = null;
                double valor = 0;
                List<RECLAMOS> listaRec = new List<RECLAMOS>();

                dgvReclamos.Rows.Clear();
                dgvReclamos.DataSource = null;

                listaRec = NReclamos.GetListReclamosByClienteRamo(codigoCliente, codigoRamo);

                foreach (RECLAMOS efReclamos in listaRec)
                {
                    if (efReclamos.RECL_ESTADO == "A")
                    {
                        estado = "PENDIENTE";
                        valor = efReclamos.RECL_VAL_RES.HasValue ? efReclamos.RECL_VAL_RES.Value : 0;
                    }
                    else if (efReclamos.RECL_ESTADO == "L")
                    {
                        estado = "LIQUIDADO";
                        valor = efReclamos.RECL_VAL_PAG.HasValue ? efReclamos.RECL_VAL_PAG.Value : 0;
                    }
                    else if (efReclamos.RECL_ESTADO == "E")
                    {
                        estado = "ELIMINADO";
                        valor = efReclamos.RECL_VAL_RES.HasValue ? efReclamos.RECL_VAL_RES.Value : 0;
                    }
                    else if (efReclamos.RECL_ESTADO == "C")
                    {
                        estado = "CERRADO";
                        valor = efReclamos.RECL_VAL_PAG.HasValue ? efReclamos.RECL_VAL_PAG.Value : 0;
                    }

                    dgvReclamos.Rows.Add(Properties.Resources.btnAviso1,
                                         efReclamos.RECL_NUMERO,
                                         efReclamos.POLI_CODIGO,
                                         efReclamos.RECL_FCH_BRO.Value.ToString(formatoFecha).ToUpper(),
                                         efReclamos.RECL_FCH_SIN.Value.ToString(formatoFecha).ToUpper(),
                                         estado,
                                         efReclamos.RECL_AMD_TITULAR.Trim(),
                                         efReclamos.RECL_AMD_PACIENTE.Trim(),
                                         valor,
                                         efReclamos.RECL_AMD_DIAGNOS.Trim(),
                                         efReclamos.RECL_SEG_DCTOS == null?"": efReclamos.RECL_SEG_DCTOS.Trim(),
                                         efReclamos.EJECUTIVOS.EJE_LOGIN.Trim());
                }
            }

    Este código me funciona perfecto, ademas que puedo dar formato a mis datos antes de llenar el dgv pero me da la sensación que se demora un poco que hacer lo siguiente:

    dgvReclamos.DataSource = NReclamos.GetListReclamosByClienteRamo(codigoCliente, codigoRamo);

    Asumo que debe existir algun evento que dispare,

    Saludos

    Guivan

    miércoles, 24 de abril de 2019 20:50