Usuario
poner valor en columna datagridview c# segun condicion de otra columna

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
- Editado Obtener datos de propiedad de navegacion miércoles, 24 de abril de 2019 18:34
Todas las respuestas
-
Hola
Gracias por usar los foros de MSDN.
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.
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. -
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