如何以编程方式迭代数据网格行?

时间:2020-03-05 18:38:41  来源:igfitidea点击:

经过多年的网络开发,我突然回到WinForms,遇到了一些本应简单的问题。我有一个绑定到Windows窗体DataGrid的业务对象的ArrayList。我希望用户能够编辑单元格,并在完成后按"保存"按钮。到那时,我想遍历" DataGrid"中的所有行和列以查找所有更改,并将它们保存到数据库中。但是我找不到访问" DataGrid"行的方法。

在编辑单个单元格时,我还将希望实时对其进行验证,但是我敢肯定可以做到。 (也许没有将" ArrayList"作为" DataSource"?)但是对于迭代" DataGrid",我很惊讶这似乎是不可能的。

为了使用数据网格,我是否必须将业务对象数据真正填充到数据表中?

解决方案

回答

foreach(var row in DataGrid1.Rows)
{
  DoStuff(row);
}
//Or ---------------------------------------------   
foreach(DataGridRow row in DataGrid1.Rows)
{
  DoStuff(row);
}
//Or ---------------------------------------------
for(int i = 0; i< DataGrid1.Rows.Count - 1; i++)
{
  DoStuff(DataGrid1.Rows[i]);
}

回答

Is there anything about WinForms 3.0 that is so much better than in 1.1

我不了解3.0,但是我们可以在.NET 2.0框架上运行的VS 2008中编写代码。 (因此,我们可以使用最新的语言,但只能使用2.0库)

这将为我们提供泛型(" List <DataRow>",而不是那些GodAwful ArrayList)和大量其他内容,实际上我们编写的代码少了3倍。

回答

object cell = myDataGrid[row, col];

回答

啊哈,我真的只是在再次测试每个人! :)真正的答案是,我们几乎不需要迭代datagrid。因为即使绑定到ArrayList,绑定也是2种方式。尽管如此,知道如何直接迭代网格还是很方便的,它可以不时地节省几行代码。

但是NotMyself和Orion给出了更好的答案:说服利益相关者升级到更高版本的C#,以节省开发成本并提高可维护性和可扩展性。