none
Controlar si existe columna datagridview RRS feed

  • Pregunta

  • Hola como va ?. Tengo la siguiente situación, hago una consulta a 2 db distintas, las agrupo y muestro en un grid el resultado de la misma que seria el legajo de un embalador y de acuerdo al peso del bulto embalado separo los tipo de bultos que son 4 distintos, luego hago un pivot para mostrar las columnas que surgieran en las consultas, dejo una muestra de que hago

    var querySD = (from c in dbcontextK1.PRODUCCION
                               where (c.ALTA >= buscar1 && c.ALTA <= buscar2) && c.UP.Contains("TU") && !c.ETIQUETA.Contains("NOREAD") && c.RECHAZO == 0
                               group c by new { c.ETIQUETA, c.PESO_REAL } into grp
                               select new
                               {
                                   key = grp.Key.ETIQUETA.Substring(0, 3),
                                   Caja = (grp.Key.PESO_REAL >= 5 && grp.Key.PESO_REAL <= 8)
                                   ? 6
                                   : grp.Key.PESO_REAL > 8 && grp.Key.PESO_REAL <= 12
                                       ? 10
                                       : grp.Key.PESO_REAL > 12 && grp.Key.PESO_REAL <= 17
                                         ? 15
                                           : (grp.Key.PESO_REAL > 17 && grp.Key.PESO_REAL <= 40)
                                              ? 18
                                              : 4
                               }).ToList();
     var querySD2 = (from c in dbcontextK2.PRODUCCION
                                where (c.ALTA >= buscar1 && c.ALTA <= buscar2) && c.UP.Contains("TU") && !c.ETIQUETA.Contains("NOREAD") && c.RECHAZO == 0
                                group c by new { c.ETIQUETA, c.PESO_REAL } into grp
                                select new
                                {
                                    key = grp.Key.ETIQUETA.Substring(0, 3),
                                    Caja = (grp.Key.PESO_REAL >= 5 && grp.Key.PESO_REAL <= 8)
                                   ? 6
                                   : grp.Key.PESO_REAL > 8 && grp.Key.PESO_REAL <= 12
                                       ? 10
                                         : grp.Key.PESO_REAL > 12 && grp.Key.PESO_REAL <= 17
                                           ? 15
                                             : (grp.Key.PESO_REAL > 17 && grp.Key.PESO_REAL <= 40)
                                                ? 18
                                                 : 4
                                }).ToList();
    var aggregateQuerySD = from x in querySD.Concat(querySD2)
                                       group x by new { x.key, x.Caja } into grp
                                       select new { key = grp.Key, cnt = grp.Count() };
    
     dtE.Rows.Clear();
                dtE.Columns.Clear();
                dtE.Columns.Add("BULTO", typeof(string));
                dtE.Columns.Add("LEGAJO", typeof(int));
                dtE.Columns.Add("CANTIDAD", typeof(int));
    
                foreach (var P in aggregateQuerySD.ToList())
                {
    
                    string dat1 = Convert.ToString(P.key);
                    dat1 = dat1.Substring(8, 3);
                    string dat2 = Convert.ToString(P.key);
                    dat2 = dat2.Substring(20, 2);
                    if (dat2 == "6 ")
                    {
                        DataRow drE = dtE.NewRow();
                        drE["BULTO"] = "PLATO6";
                        drE["LEGAJO"] = dat1;
                        if (P.cnt == 0)
                        {
                            drE["CANTIDAD"] = P.cnt;
                            dtE.Rows.Add(drE);
                        }
                        else
                        {
                            
                            drE["CANTIDAD"] = P.cnt;
                            dtE.Rows.Add(drE);
                        }
                       
                    }
    
                    if (dat2 == "10")
                    {
                        DataRow drE = dtE.NewRow();
                        drE["BULTO"] = "PLATO10";
                        drE["LEGAJO"] = dat1;
                        if (P.cnt == 0)
                        {
                            drE["CANTIDAD"] = P.cnt;
                            dtE.Rows.Add(drE);
                        }
                        else
                        {
                            
                            drE["CANTIDAD"] = P.cnt
                            dtE.Rows.Add(drE);
                        }
                    }
                    if (dat2 == "15")
                    {
                        DataRow drE = dtE.NewRow();
                        drE["BULTO"] = "CAJA15";
                        drE["LEGAJO"] = dat1;
                        if (P.cnt == 0)
                        {
                            drE["CANTIDAD"] = P.cnt;
                            dtE.Rows.Add(drE);
                        }
                        else
                        {
                            
                            drE["CANTIDAD"] = P.cnt;
                            dtE.Rows.Add(drE);
                        }
                    }
                    if (dat2 == "18")
                    {
                        DataRow drE = dtE.NewRow();
                        drE["BULTO"] = "CAJA18";
                        drE["LEGAJO"] = dat1;
                        if (P.cnt == 0)
                        {
                            drE["CANTIDAD"] = P.cnt;
                            dtE.Rows.Add(drE);
                        }
                        else
                        {
                            
                            drE["CANTIDAD"] = P.cnt;
                            dtE.Rows.Add(drE);
                        }
                    }
                    
                   
                }
                string xE = "BULTO";
                string yE = "LEGAJO";
                string zE = "CANTIDAD";
    
    
                if (yE != "" && zE != "")
                    newDtE = PivotTable.GetInversedDataTable(dtE, xE, yE, zE, "0", chkSumValues.Checked);
    
                else
                    newDtE = PivotTable.GetInversedDataTable(dtE, xE, yE);
    
                dataGridView6.DataSource = newDtE;

    Ahora en el grid me muestra la información bien, el problema me surge porque quiero imprimir el grid y lo paso a un dataset de forma manual, pero como la consulta puede arrojar o no los 4 tipos de bultos y es aquí donde me trabe ya que tengo un método que llena el dataset.

     rowProduccionEmb.Plato6 = row.Cells["PLATO6"].Value.ToString();
                    rowProduccionEmb.Plato10 = row.Cells["PLATO10"].Value.ToString();
                    rowProduccionEmb.Cajas15 = row.Cells["CAJA15"].Value.ToString();
                    rowProduccionEmb.Cajas18 = row.Cells["CAJA18"].Value.ToString();
    Como haría para interceptar si en la consulta no existe cualquiera de los bultos. Desde ya gracias.

     
    lunes, 28 de mayo de 2018 22:05

Todas las respuestas

  • Perdón me olvidaba como prueba hice un try para cada situación, no se si esto sea correcto.
    lunes, 28 de mayo de 2018 22:17
  • Recorra la colección Columns de la grilla.  Ahí podrá averiguar exactamente cuáles columnas existen.  No sé qué tipo de proyecto esté haciendo, pero podría ser que la colección Columns tenga el método Contains(string), donde el argumento sería el nombre de columna.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT


    lunes, 28 de mayo de 2018 22:28
    Moderador
  • Recorra la colección Columns de la grilla.  Ahí podrá averiguar exactamente cuáles columnas existen.  No sé qué tipo de proyecto esté haciendo, pero podría ser que la colección Columns tenga el método Contains(string), donde el argumento sería el nombre de columna.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT


    Hola Jose gracias por responder. El tipo de proyecto es el siguiente, por dos lineas de producción pasan en una maquinas las cajas las cuales leen un código de barra, donde leen el embalador y luego en unas balanzas en esa lineas pesan las cajas y se guardan en una base sql los registros uno a uno, este desarrollo no es mio y ya viene con las maquinas, tengo acceso a la base y realizo la consulta al terminar el día para establecer que produjo cada embalador, dejo una imagen para que se entienda

    En la imagen muestro 2 consultas una del día 16 y otra del día 24, en la ultima grilla sale el resultado definitivo y como se observa el dia 16 tiene 3 tipos de bultos y el dia 24 solo 2, lo que quiero hacer es contemplar los casos en donde no aparezcan bultos, cuando lleno el dataset para luego imprimir, puse un try a cada caso un ejemplo.

    try
                    {
                        rowProduccionEmb.Plato6 = row.Cells["PLATO6"].Value.ToString();
                    }
                    catch (Exception)
                    {
    
                        rowProduccionEmb.Plato6 = "0";
                    }
    Esto es lo hice para interceptar el error de que no exista algún bulto y lo que usted propone seria la solución, si pudiera ayudarme como haría para recorrer la colección de columnas de la grilla agradecido

    lunes, 28 de mayo de 2018 22:54
  • Pues todo creo comprenderlo, pero mi sugerencia no cambia.  En un DGV con columnas automáticas, existe la propiedad Columns.  No he buscado pero podría tener un método Contains() que acepte el nombre  de columna y devuelva un Booleano con la respuesta de si existe o no.

    Alternativamente, puede recorrer la colección Columns y determinar cuáles columnas se han creado.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    miércoles, 30 de mayo de 2018 20:37
    Moderador