首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代DataGridView

迭代DataGridView
EN

Stack Overflow用户
提问于 2020-11-11 13:33:36
回答 3查看 214关注 0票数 0

我有一个DataGridView,它看起来像这样:

代码语言:javascript
复制
ColumnA | ColumnB | ColumnC
--------+---------+--------
10      | 10      |
20      | 20      |
30      | 30      |

我想迭代这个DataGridView并计算A+B,结果应该在列C中。

到目前为止,我尝试的是:

代码语言:javascript
复制
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并取行的每个值来计算,然后移动到下一行吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-11 14:02:19

作为@uwe-keim注释,您要添加字符串,需要将单元格值粘贴到整数拳头中。

这应该适用于你:

代码语言:javascript
复制
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,具体取决于字符串是否可以转换为数字。

代码语言:javascript
复制
decimal result = 0;
Console.WriteLine(decimal.TryParse("hello", out result));
票数 0
EN

Stack Overflow用户

发布于 2020-11-12 14:54:05

不要直接使用DataGridView。使用数据绑定代替。

例如,您可以使用好的旧DataTable来存储和处理数据。

给它一个明确的名称,让您能够准确地知道存储在其中的是什么,而不是some

代码语言:javascript
复制
// form field
DataTable someDataTable;

创造它。也许您应该使用int以外的其他类型。例如,floatdouble

代码语言:javascript
复制
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:

代码语言:javascript
复制
dataGridView1.DataSource = someDataTable;

填写一些数据:

代码语言:javascript
复制
someDataTable.Rows.Add(10, 10);
someDataTable.Rows.Add(20, 20);
someDataTable.Rows.Add(30, 30);
票数 1
EN

Stack Overflow用户

发布于 2020-11-13 05:05:49

DataGridView只是一个视图控件,负责显示数据。

与其操作DataGridView单元格,不如使用“适合作业的工具”--一个对象。

创建一个类来表示一行

代码语言:javascript
复制
public class Row
{
    public int Price { get; set; }
    public int Quantity { get; set; }
    public int Total => Price * Quantity; // Here we calculate third column
}

创建要在DataGridView中显示的记录集合

代码语言:javascript
复制
// 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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64787444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档