0

に問題がありDataGridViewます。2 つのセルを乗算し、結果を 3 番目のセルに表示したいと考えています。

私は2つ持っていDataGridViewます。最初DataGridViewはデータベースからデータを取得します。first から行を選択した後、2 番目DataGridViewは値を取得しDataGridView、その行を second に追加しDataGridViewます。列 A は最初DataGridViewから (データベースから) 取得します。列 B では、ユーザーが手動で値を挿入します。

example of second datagridview: 
Price |  Amount  |  Total
10.50 | 2        | 21.00
5.20  | 4        | 20.80
7.30  | 5        | 36.50

その後、列 C を合計し、その合計をテキスト ボックスに表示します。

列 A は 10 進数です。列 B は整数です。列 C も 10 進数にする必要があります。

これは、ある人がインターネットで私にくれた解決策ですがDataGridView、手動でデータを取得する場合にのみ機能し、データがデータベースからのものである場合は機能しません:

decimal sum = 0.0m;

for (int i = 0; i < gridProizvodi.Rows.Count; i++)
{
    DataGridViewRow row = gridProizvodi.Rows[i];
    if (row.IsNewRow) break;
    decimal product = Convert.ToDecimal(row.Cells[1].Value)
                    * Convert.ToInt32(row.Cells[2].Value);

    sum += product;
    row.Cells[3].Value = product;
}

txtCijena.Text= sum.ToString();

この行でargument out of range exception was unhandledエラーが発生します

decimal product = Convert.ToDecimal(row.Cells[1].Value)
                * Convert.ToInt32(row.Cells[2].Value);

誰かが解決策を見つけるのを手伝ってくれますか?

4

4 に答える 4

0

あなたが悲しいようにエラーが回線上で発生した場合。次に、より高速な解決策は、列名を使用することです。@Andresが述べたように、インデックスを使用するよりも良い方法です。

フォーム デザイナーから列名を確認し、次のように使用します。

decimal product = Convert.ToDecimal(row.Cells[datagridviewTextBoxColumn1.Name].Value)
                * Convert.ToInt32(row.Cells[datagridviewTextBoxColumn2.Name].Value);

または、列のカスタム名を使用する方がはるかに優れています。

2 番目の datargidview に事前定義された列がありますか、それともプログラムで作成されましたか?

定義済みの名前がある場合->それらを使用します

そうでない場合 -> 2番目のデータグリッドビューには常に同じ列があるため、たとえばデザイナーで列を一度作成する方がよいでしょう

于 2013-05-31T04:06:06.273 に答える
0

こんな風に変えてみたらどうですか

decimal sum = 0.0m;
decimal product = 0;

for (int i = 0; i < gridProizvodi.Rows.Count; i++)
{
    DataGridViewRow row = gridProizvodi.Rows[i];
    if (row.IsNewRow) break;
    product = row.item("Price") * row.item("Amount");
    '--- if your price and amount field is numeric type, you dont have to convert it

    sum += product;
    row.item("Total") = product;
}
于 2013-05-31T06:00:41.357 に答える