我对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);
有人可以帮我找到解决方案吗?
答案 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
谢谢!!