我使用System.Windows.Forms.DataGrid而不是DataGridView。我知道它已经过时了,但我正在使用从DataGrid继承的自定义控件,它太复杂了,不需要几天的工作就不能移植到DataGridView。
我需要遍历行,但它没有Rows
集合,所以尝试像
DataGrid grid = filterableGrid.EmbeddedDataGrid;
foreach (var row in grid.Rows)
{
// do stuff
}
失败,出现如下错误:
'DataGrid'不包含'Rows'的定义,也没有扩展方法…
我该如何迭代它呢?
如果您没有隐藏行或列,您可以使用以下代码进行迭代:
for (int row = 0; row < grid.VisibleRowCount; row++)
{
for (int column = 0; column < grid.VisibleColumnCount; column++)
{
var value = grid[row, column];
}
}
如果有隐藏的行和列,事情会变得更复杂。您可以使用索引器迭代DataGrid的行和列,如下所示:
var rowsCount = grid.BindingContext[grid.DataSource, grid.DataMember].Count;
var columnsCount = ((DataGridTableStyle)(grid.GetType().GetField("myGridTable",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
.GetValue(grid))).GridColumnStyles.Count;
for (int row = 0; row < rowsCount; row++)
{
for (int column = 0; column < columnsCount; column++)
{
var value = grid[row, column];
}
}
同样,如果DataGrid
的DataSource
是DataTable
,您可以使用:
var table = grid.DataSource as DataTable;
foreach (DataRow row in table.Rows)
{
//...
}