如何以编程方式迭代数据网格行?
时间: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#,以节省开发成本并提高可维护性和可扩展性。