5

我有两种形式Form1(DGV1 & DGV2),并且在这两种形式上Form2(DGV3 & DGV4)都有Datagridview控件。

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

有两个按钮Form2DoneAdd Items

当用户通过依次选择行来单击 Add Items 时,必须将行添加到datagridviewonForm1并且单击 Done 按钮时,Form1应显示所有添加的行。

我已经实现了这一点。

DGV1和中的列DGV2

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依赖于ItemIDfor的总和Form → DGv2并更新SellQtyin 的值DGV1

例子:For ItemID=1 sum(SellQty)=40

所以我需要将此值分配给DGV1 SellQty Column=40.

请指教。

4

3 回答 3

8

以下将为您提供总数量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;
}
于 2013-02-08T12:35:29.797 回答
1

我认为这段代码可能有用

Textbox.Text = (from dr in MyDataSet.MyTable.AsEnumerable()
              where !dr.IsCR_TRANSFER_AMTNull()
              select dr.CR_TRANSFER_AMTNull).Sum().ToString();
于 2013-02-08T12:31:41.733 回答
0

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

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()));
于 2013-02-08T12:45:17.377 回答