5

私には2つのフォームがForm1(DGV1 & DGV2)あり、両方のフォームForm2(DGV3 & DGV4)Datagridviewコントロールがあります。

には、ユーザーが行を追加できる場所へForm1のボタンリンクがあります。では、最初の列にがあり、ユーザーは一度に1行しか選択できません。Form2Form1 datagridview(DGV1)Form2 → (DGV3 and DGV4)checkbox

に2つのボタンがありますForm2DoneAdd Items

ユーザーが行を次々に選択して[アイテムの追加]をクリックすると、行がdatagridviewオンに追加され、 Form1[完了]ボタンをクリックすると、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

の読み込み中に、forに依存する合計を取得し、 in の値を更新するForm1にはどうすればよいですか。SellQtyItemIDForm → DGv2SellQtyDGV1

例: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));

編集:

グリッドビューを更新するには、次の操作を実行できます。

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

このコードは多分usfullだと思います

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

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