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

标签 c# .net winforms datagrid

我使用 System.Windows.Forms.DataGrid 而不是 DataGridView。我知道它已经过时了,但我正在使用 a custom control that inherits from DataGrid而且移植到 DataGridView 太复杂,需要几天的工作才能移植到 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...

那么我该如何迭代它呢?

最佳答案

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

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

如果存在隐藏的行和列,事情会变得更加复杂。您可以迭代 DataGrid 的行和列使用indexer这样:

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];
    }
}

此外,如果您的 DataGridDataSourceDataTable,您可以使用:

var table = grid.DataSource as DataTable;
foreach (DataRow row in table.Rows)
{
    //...
}

关于c# - 枚举/迭代 System.Windows.Forms.DataGrid 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706071/

相关文章:

c# - CopyToDataTable : Why exactly does it throw an error if one field is NULL, 以及如何修复它?

c# - WPF 的高 CPU 使用率

c# - Controls.Add(tabPage) 与 TabPages.Add(tabPage)

c# - Windows 窗体中的 Button_click

c# - 是否可以使 FolderBrowserDialog 的默认路径显示在库中而不是实际磁盘中?

c# - 从代码启动卸载程序

c# - 枚举显示名称 : Templates can be used only with field access

.net - 如何卸载 .NET 框架?

c++ - 如何使用 VS2010 为 windows x64 位编译 Leptonica 库?

c# - 需要模拟用户访问网络资源,Asp.Net 帐户