我使用 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];
}
}
此外,如果您的 DataGrid
的 DataSource
是 DataTable
,您可以使用:
var table = grid.DataSource as DataTable;
foreach (DataRow row in table.Rows)
{
//...
}
关于c# - 枚举/迭代 System.Windows.Forms.DataGrid 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706071/