我有一个DataGridView,它看起来像这样:
ColumnA | ColumnB | ColumnC
--------+---------+--------
10 | 10 |
20 | 20 |
30 | 30 |我想迭代这个DataGridView并计算A+B,结果应该在列C中。
到目前为止,我尝试的是:
foreach (Datagridview rw in datagridview1.Rows)
{
int result = rw.Cells["ColumnA"].Value.ToString() +
rw.Cells["ColumnB"].Value.ToString();
rw.Cells["ColumnB"] = result.ToString();
}但这行不通。我得到了第一列填充,但其他列是emtpy。
有人能告诉我如何迭代一个DataGridView并取行的每个值来计算,然后移动到下一行吗?
发布于 2020-11-11 14:02:19
作为@uwe-keim注释,您要添加字符串,需要将单元格值粘贴到整数拳头中。
这应该适用于你:
foreach (Datagridview rw in datagridview1.Rows)
{
int result = Convert.ToInt32(rw.Cells["ColumnA"].Value) +
Convert.ToInt32(rw.Cells["ColumnB"].Value);
rw.Cells["ColumnB"] = result.ToString();
}
更新:如果您希望能够管理也浮动,Convert.ToSingle()会来帮助您。替换它而不是Convert.ToInt32(),所有有效的字符串都将转换为浮动。(与Convert.ToDouble()相同)。
如果要验证字符串的存在,则可以使用TryParse()函数,该函数将返回true或false,具体取决于字符串是否可以转换为数字。
decimal result = 0;
Console.WriteLine(decimal.TryParse("hello", out result));发布于 2020-11-12 14:54:05
不要直接使用DataGridView。使用数据绑定代替。
例如,您可以使用好的旧DataTable来存储和处理数据。
给它一个明确的名称,让您能够准确地知道存储在其中的是什么,而不是some。
// form field
DataTable someDataTable;创造它。也许您应该使用int以外的其他类型。例如,float或double。
someDataTable = new DataTable();
someDataTable.Columns.Add("ColumnA", typeof(int));
someDataTable.Columns.Add("ColumnB", typeof(int));
someDataTable.Columns.Add("ColumnC", typeof(int), "ColumnA + ColumnB");注意,我们为ColumnC列指定了一个表达式。现在,该列中的值将自动计算。
将DataTable绑定到DataGridView:
dataGridView1.DataSource = someDataTable;填写一些数据:
someDataTable.Rows.Add(10, 10);
someDataTable.Rows.Add(20, 20);
someDataTable.Rows.Add(30, 30);发布于 2020-11-13 05:05:49
DataGridView只是一个视图控件,负责显示数据。
与其操作DataGridView单元格,不如使用“适合作业的工具”--一个对象。
创建一个类来表示一行
public class Row
{
public int Price { get; set; }
public int Quantity { get; set; }
public int Total => Price * Quantity; // Here we calculate third column
}创建要在DataGridView中显示的记录集合
// In Form_Load for example
var firstRow = new Row { Price = 199, Quantity = 2 };
var secondRow = new Row { Price = 49, Quantity = 100 };
var allRows = new BindingList<Row>();
allRows.Add(firstRow);
allRows.Add(secondRow);
// Set DataGridView.DataSource to created list
datagridview1.DataSource = allRows;https://stackoverflow.com/questions/64787444
复制相似问题