枚举/迭代System.Windows.Forms.DataGrid的行

时间:2016-09-26 14:56:28

标签: c# winforms datagrid

我使用System.Windows.Forms.DataGrid而不是DataGridView。我知道它已经过时了,但我使用的是a custom control that inherits from DataGrid,而且如果没有工作天数就很难移植到DataGridView。

我需要遍历行,但它没有Rows集合,所以尝试像

DataGrid grid = filterableGrid.EmbeddedDataGrid;
foreach (var row in grid.Rows)
{
    // do stuff
}

因此错误而失败:

'DataGrid' does not contain a definition for 'Rows' and no extension method...

那么我该如何进行迭代呢?

1 个答案:

答案 0 :(得分:2)

如果您没有隐藏的行或列,可以使用以下代码进行迭代:

for (int row = 0; row < grid.VisibleRowCount; row++)
{
    for (int column = 0; column < grid.VisibleColumnCount; column++)
    {
        var value = grid[row, column];
    }
}

如果有隐藏的行和列,事情会变得更复杂。您可以使用indexer以这种方式遍历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];
    }
}

如果DataSource的{​​{1}}是DataGrid,您可以使用:

DataTable