0

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

我有两个DataGridViews。第一个DataGridView从数据库中获取数据。DataGridView在我从 first 中选择行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列是十进制类型;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

4 回答 4

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 回答
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

谢谢你!!

于 2013-09-11T06:18:13.230 回答
0

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

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

另一个选项是从数据库中返回三列,第三列是您的相乘值。

希望这可以帮助...

于 2013-05-31T00:30:38.047 回答
0

如果您伤心时在线上发生错误。然后更快的解决方案是使用列名。正如@Andres 提到的那样,使用索引是更好的做法。

从表单设计器检查列名,然后像这样使用:

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

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

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

如果它们有预定义的名称-> 则使用它们

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

于 2013-05-31T04:06:06.273 回答