【问题标题】:Get Sum of datagridview Column using Linq for a distinct ID使用 Linq 获取不同 ID 的 datagridview 列的总和
【发布时间】:2013-02-08 21:04:00
【问题描述】:

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

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

Form2 上有两个按钮:DoneAdd Items

当用户通过依次选择行来单击添加项目时,必须将行添加到Form1 上的datagridview,并且当单击完成按钮时,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期间,如何根据ItemIDForm → DGv2获取SellQty的总和,并更新DGV1SellQty的值。

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

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

请指教。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    以下将为您提供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;
    }
    

    【讨论】:

    • 嗨...我通过遍历 gridview 并使用数据表对象 Value = dtBatchSellQty.Compute("Sum(SellQty)", "BatchItemID='" + ItemID 来获取特定 ID 的总和。 ToString() + "'"); sum = Convert.ToInt32(Value);我的问题如何将此值分配给 ItemID=1 的 DGV1 单元格的 SellQty 列
    • @user2002785,您可以迭代 GridView 行并将 SellQty 设置为总计,但我相信您的问题是使用 LINQ 获得总计
    • 是的 Habib...我现在使用 Linq..来获取总和。但我不知道如何设置值..因为我们需要 ItemId 所在行的 rowIndex匹配
    • @user2002785,为什么不使用简单的 for 循环并检查 ItemId 为 1 的位置,更新单元格的值,如 DGV1.Rows[index].Cells["SellQty"] = total
    • 我正在尝试相同的方法..但无法找到解决方案。
    【解决方案2】:

    我认为这段代码可能有用

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

    【讨论】:

    • 嗨...我通过遍历 gridview 并使用数据表对象 Value = dtBatchSellQty.Compute("Sum(SellQty)", "BatchItemID='" + ItemID 来获取特定 ID 的总和。 ToString() + "'"); sum = Convert.ToInt32(Value);我的问题如何将此值分配给 ItemID=1 的 DGV1 单元格的 SellQty 列
    【解决方案3】:

    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()));
    

    【讨论】:

    • 嗨 Spajce...我们又见面了..问题是如何将此值分配给 ItemId=1 或 2 或 3 的 DGV1 SellQty 单元格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多