datagridview乘以单元格值

时间:2013-05-30 21:19:49

标签: c# winforms datagridview

我对DataGridView有疑问。我想将两个单元格相乘并在第三个单元格中显示结果。

我有两个DataGridView个。第一个DataGridView从数据库中获取数据。从第一个DataGridView中选择行后,第二个DataGridView获取值,并将该行添加到第二个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列是十进制类型; B列是整数; C列也应该是小数。

这是一个人在互联网上给我的解决方案,但它仅适用于手动获取数据的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 个答案:

答案 0 :(得分:0)

我不确定您是使用表单还是webapp ...以下选项通常适用于webapps,我不知道表单。

这通常在自动生成GridView列时发生,即gridview.AutoGenerateColumns = true;。它不知道有任何列,因此会给你out of range例外。您需要将其设置为false并告诉它要显示的列。在第三列的模板字段中,您只需将绑定属性更改为多重值即可。

另一个oprion是从数据库中返回三列,第三列是你的乘法值。

希望这会有所帮助......

答案 1 :(得分:0)

如果你伤心的话就行了。然后更快的解决方案是使用列名。 正如@Andres所说,使用索引是更好的做法。

从表单设计器检查列名,然后使用如下:

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

或者更好的是使用列的自定义名称。

让您的第二个datargidview成为预定义列还是以编程方式创建?

如果他们有预定义的名字 - &gt;然后使用它们

如果他们不 - >那么,因为你在第二个datagridview中总是有相同的列,所以最好在设计器中创建一次列,例如

答案 2 :(得分: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;
}

答案 3 :(得分:0)

如果你想在VB.NET中这样做......

Dim sum As Decimal = 0D

For i As Integer = 0 To DataGridView1.Rows.Count - 1
    Dim row As DataGridViewRow = DataGridView1.Rows(i)
    If row.IsNewRow Then
        Exit For
    End If

    Dim product As Decimal = Convert.ToDecimal(row.Cells("Column1").Value) * _
            Convert.ToDecimal(row.Cells("Column2").Value)
    'sum += product
    row.Cells("Column3").Value = product
Next

谢谢!!