在DataGridView中循环,并在检查行的位置添加值

本文关键字:位置 添加 DataGridView 循环 检查 | 更新日期: 2023-09-27 18:25:16

我有一个C#应用程序,我有DataGridView,我可以绑定到数据源或动态加载数据,但与我需要做的无关。

致启始-我有三列。第一列是一个复选框,后面是一个ID列,该列不是唯一的,可以包含双工器,然后是一个Amount列。

我需要将数据加载到单独的行中,这样我就不想在填充DataGridView之前累积数据集,因为用户会选择要标记的值,所以-我想在DataGridView中循环,对于所有选中的行,累积或汇总ID相同的amount列。

作为一个例子,下面是一个数据示例。ID金额
1 50.25
2 15.20
3 66.95
1 12.01
3 15.15
1 85.27

如果我们假设ID 1的前两条记录已被检查,那么我希望在DataGridView中循环并将金额相加,并为所有检查的行指定一个金额
但在这种情况下,ID 1(50.25+12.01=62.26)

有什么建议吗?

提前感谢您。

在DataGridView中循环,并在检查行的位置添加值

如果您有LINQ,那么这几行的东西可能会工作(没有任何代码)。显然,它需要为您自己的代码进行修改,但想法是存在的。你可以从中得到每个分组的总和。

ListOfDataRows.Where(x => x.Checked)
    .GroupBy(x=>x.ColumnWithId)
    .Sum(x => x.ColumnWithValue);

您可以使用LINQ进行所有计算:

var summedRows = yourDataGridView
    .Cast<DataGridViewRow>()
    .Where(r => (bool)r.Cells[0].Value == true) 
    .GroupBy(r => r.Cells[1].Value)
    .Select(g => new 
        { 
            Id = g.Key, 
            Sum = g.Sum(r => (double)r.Cells[2].Value) 
        }
    );

现在您所需要做的就是基于这些值构建新的DataGridViewRows集合。

编辑:

如果您的网格包含"添加新行"伪行(最后一行),您需要在查询中跳过它:

var summedRows = yourDataGridView
    .Cast<DataGridViewRow>()
    .Take(yourDataGridView.Rows.Count - 1)
    // rest same as above