【问题标题】:sum distinct values from a column in datagridview对 datagridview 中列的不同值求和
【发布时间】:2021-07-24 08:25:30
【问题描述】:

我有一个包含两列的 datagridview:

 group | quantity
------------------------
   chest  |  3
   legs   |  7
   back   |  2
   chest  |  1
   back   |  5
   legs   |  2

我想要做的是将不同组的总和放到一个列表中,并使用该列表填充另一个 datagridview。

所以结果一定是这个例子:

   chest  |  4
   legs   |  9
   back   |  7
   

我尝试了一些 linq 查询代码,但没有任何成功。

我该怎么做?

这是我尝试过的一些 Linq 查询:

List<string> vv = dataGridView1.Rows.Cast<DataGridViewRow>()
    .Where(x => !x.IsNewRow)
    // either..
    .Where(x => x.Cells[7].Value != null)
    //..or or both
    .Select(x => x.Cells[7].Value.ToString())
    .Distinct()
    .ToList();

dataGridView6.DataSource = vv; 

编辑

选择另一个列组合框后,组列正在自动填充,数量是手动填充的。对于 group by,我找到了这段代码并且可以工作,但如果单元格为空,则会抛出错误:

    var Sums = dataGridView1.Rows.Cast<DataGridViewRow>()
                  .GroupBy(row => row.Cells[7].Value.ToString()) // group column
                  .Select(g => new { User = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) });
dataGridView6.DataSource = Sums.ToList(); 

【问题讨论】:

  • 你能显示你已经尝试过的 Linq 查询吗?
  • @Martin 我尝试了不同的代码。现在我有了这个,但它没有求和,也没有得到组名。由于某种原因,它返回组名的长度: List vv = dataGridView1.Rows.Cast() .Where(x => !x.IsNewRow) // 要么.. .Where(x => x.Cells[7].Value != null) //..或两者兼有 .Select(x => x.Cells[7].Value.ToString()) .Distinct() .ToList(); dataGridView6.DataSource = vv;
  • 对用作GridView数据源的数据集合执行此操作会更容易。
  • 这是不可能的,因为datagridview是手动填充的
  • 您需要为此使用 group by linq 方法

标签: c# linq datagridview sum


【解决方案1】:

好的,这里是可行的解决方案:

var Sums = dataGridView1.Rows.Cast<DataGridViewRow>()
          .Where(row => row.Cells[7].Value != null)
        .GroupBy(row => row.Cells[7].Value.ToString()) // group column
        .Select(g => new { User = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) }); // quantity column

        dataGridView6.DataSource = Sums.ToList();

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多