none
Agrupar y sumar datos dataset RRS feed

  • Pregunta

  • Buenos días compañeros, 

    Tengo el siguiente código:

         if (gridView2.SelectedRowsCount == 0)
                {
                    MessageBox.Show("Seleccione al menos una fila", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
    
                }
    
                else
                {
    
                    DataTable dt = new DataTable("Productos");
                    dt.Columns.Add("ItemCode", typeof(string));
                    dt.Columns.Add("ItemName", typeof(string));
                    dt.Columns.Add("CodCompra", typeof(string));
                    dt.Columns.Add("Unidad", typeof(string));
                    dt.Columns.Add("Cliente", typeof(string));
                    dt.Columns.Add("Cantidad", typeof(int));
                    dt.Columns.Add("Precio", typeof(string));
                    dt.Columns.Add("CardName", typeof(string));
                    dt.Columns.Add("CardCode", typeof(string));
    
                    for (int i = 0; i < gridView2.RowCount; i++)
                    {
    
                        if (gridView2.IsRowSelected(i) == true)
                        {
                            DataRow fila = dt.NewRow();
                            fila["ItemCode"] = gridView2.GetRowCellValue(i, gridView2.Columns[1]).ToString();
                            fila["ItemName"] = gridView2.GetRowCellValue(i, gridView2.Columns[2]).ToString();
                            fila["CodCompra"] = gridView2.GetRowCellValue(i, gridView2.Columns[11]).ToString();
                            fila["Unidad"] = gridView2.GetRowCellValue(i, gridView2.Columns[12]).ToString();
                            fila["Cliente"] = gridView2.GetRowCellValue(i, gridView2.Columns[13]).ToString();
                            fila["Cantidad"] = gridView2.GetRowCellValue(i, gridView2.Columns[14]).ToString();
                            fila["Precio"] = gridView2.GetRowCellValue(i, gridView2.Columns[15]).ToString();
                            fila["CardName"] = gridView2.GetRowCellValue(i, gridView2.Columns[16]).ToString();
                            fila["CardCode"] = gridView2.GetRowCellValue(i, gridView2.Columns[17]).ToString();
                            dt.Rows.Add(fila);
                        }
                    }
    
                    FrmDetalleSap frmDetalleSap = new FrmDetalleSap(this);
                    dt = dt.AsEnumerable().GroupBy(r => new { Col1 = r["ItemCode"] }).Select(g => g.OrderBy(r => r["Cliente"]).First()).CopyToDataTable();
                    dt.AsEnumerable().Sum(x => x.Field<int>("Cantidad"));
                    frmDetalleSap.gridControl2.DataSource = dt;
                    frmDetalleSap.Show();
    
    
                }

    Lo que deseo hacer es pasarle al data set los campos agrupados y sumados por el campo cantidad, por supuesto cuando se cumpla el criterio de agrupación, la parte de la agrupación me funciona correctamente, lo que no logro hacer es la suma junto a la agrupación.

    De antemano muchas gracias por la ayuda.

    martes, 12 de diciembre de 2017 17:04

Respuestas

Todas las respuestas

  • hola

    no te animas a usar linq ? porque con este podrias agrupar sin problemas

    aqui

    [Linq] DataSet – Agrupar y totalizar

    explico como podrias lograrlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Pablo RubioModerator martes, 12 de diciembre de 2017 18:53
    • Marcado como respuesta Crs_Chacon martes, 12 de diciembre de 2017 21:27
    martes, 12 de diciembre de 2017 17:52
  • Muchas gracias Leandro, justo lo que necesitaba
    martes, 12 de diciembre de 2017 21:27
  • Leandro tengo otra consulta, la agrupación y la suma funcionan correctamente el tema es que yo en el data set, tengo mas columnas y necesito mostrarlas, estoy aplicando

     foreach (IGrouping<string, DataRow> item in datos)
                {
                    DataRow row2 = dt.NewRow();
                    row2["ItemCode"] = item.Key;
                    row2["ItemName"] = item.ToString();
                    row2["CodCompra"] = item.ToString();
                    row2["Unidad"] = item.ToString();
                    row2["Cliente"] = item.ToString();
                    row2["Cantidad"] = item.Sum<DataRow>(x => Convert.ToInt32(x["Cantidad"]));
                    row2["Precio"] = item.ToString();
                    row2["CardName"] = item.ToString();
                    row2["CardCode"] = item.ToString();
                    dt.Rows.Add(row2);
                }

    Pero en las filas que aplico .ToString(), me aparece este resultado

    martes, 12 de diciembre de 2017 21:47