我使用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...
那么我该如何进行迭代呢?
答案 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