获取datagridview的总和使用Linq获取不同ID的列

时间:2013-02-08 12:28:32

标签: c# winforms datagridview

我在表单上有两个表单Form1(DGV1 & DGV2)Form2(DGV3 & DGV4)以及Datagridview控件。

Form1上有一个指向Form2的按钮链接,用户可以在其中向Form1 datagridview(DGV1)添加行。在Form2 → (DGV3 and DGV4)中,第一列中有checkbox,用户一次只能选择一行。

Form2上有两个按钮:DoneAdd Items

当用户通过逐个选择行来点击添加项时,必须将行添加到datagridview上的Form1,并且当单击完成按钮时,应显示Form1添加了所有行。

我已经实现了这个目标。

DGV1DGV2中的列是

DGV1列

Sno Desciption SellQty ItemID
----------------------------
 1    ABC       0         1 
 2    XYZ       0         2

DGV2列

Sno BatchNo SellQty ItemID
----------------------------
1    123       10         1
2    528       20         2
1    568       30         1
2    522       40         2

在加载Form1期间,如何根据SellQty的{​​{1}}获取ItemID的总和,并在Form → DGv2更新SellQty的值{1}}。

示例:DGV1

所以我需要将此值分配给For ItemID=1 sum(SellQty)=40

请建议。

3 个答案:

答案 0 :(得分:6)

以下内容将为您提供ItemID == 1 - 的总数量(确保为数据网格使用正确的列名称)

int total = DGV1.Rows.Cast<DataGridViewRow>()
                    .Where(r=> Convert.ToInt32(r.Cells["ItemID"].Value) == 1)
                    .Sum(t=> Convert.ToInt32(t.Cells["SellQty"].Value));

编辑:

对于您的更新gridview,您可以这样做:

for (int i = 0; i < DGV1.Rows.Count; i++)
{
    if (Convert.ToInt32(DGV1.Rows[i].Cells["ItemID"].Value) == 1)
        DGV1.Rows[i].Cells["SellQty"] = total;
}

答案 1 :(得分:1)

我认为这段代码可能很有用

Textbox.Text = (from dr in MyDataSet.MyTable.AsEnumerable()
              where !dr.IsCR_TRANSFER_AMTNull()
              select dr.CR_TRANSFER_AMTNull).Sum().ToString();

答案 2 :(得分:0)

来自Habib先生想法的linq的另一个版本

var total = DGV1.Rows.Cast<DataGridViewRow>()
             .Where(c => int.Parse(c.Cells[IndeOfItemId].EditedFormattedValue.ToString()) == 1)
             .Sum(x => int.Parse(x.Cells[IndexOfSellQty].EditedFormattedValue.ToString()));