获取已过滤的DataGrid中所选行的索引

时间:2014-11-25 11:30:18

标签: c# winforms datagrid indexing

我在WinForms中使用DataGrid类并使用RowFilter过滤数据。

//docRows = some DataTable
dgDocRow.DataSource = docRows;
docRows.DefaultView.RowFilter = "WHERE ID > 1"

现在网格仅显示已过滤的行

当我想访问网格中的选定行时,我使用

int i = docRows.CurrentRowIndex;
DataRow dr = ((DataTable)docRows.DataSource).Rows[i];

然而,这会返回不正确的数据,因为docRows.CurrentRowIndex会在过滤后的DataGrid中为我提供索引,并使用原始DataSource中的((DataTable)docRows.DataSource).Rows[i]选择进行选择,而不会过滤。

如何在新过滤的DataSource中获取正确的row / rowindex? (没有遍历整个表格,这就是我现在的表现)

谢谢,zbynek

1 个答案:

答案 0 :(得分:2)

您可以通过BindingManagerBase和BindingManagerBase的Current属性获取当前行。

// dgDocRow is DataGrid
BindingManagerBase bm = this.dgDocRow.BindingContext[this.dgDocRow.DataSource, this.dgDocRow.DataMember];
DataRow dr = ((DataRowView)bm.Current).Row;