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

问题描述:

我在WinForms中使用DataGrid类并使用RowFilter过滤数据。获取已过滤DataGrid中选定行的索引

//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中,并使用((DataTable)docRows.DataSource).Rows[i]从原始DataSource中进行选择,该数据源未经过滤。

如何在新的过滤数据源中获取正确的行/ rowindex? (不通过全表,迭代这是我要做的事现在)

感谢,兹比涅克

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

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

不幸的是,这不适用于我 - dgDocRow没有属性DataMember - 可能是由于使用.NET 3.5? 我开发的应用程序是针对Windows CE的,所以我必须在VS 2008中开发它,新版本不支持Compact Framework – Zbynek 2014-11-25 13:55:19

+0

尝试传递string.Empty而不是DataMember。 – 2014-11-25 13:59:22

+0

Wonderfull!万分感谢。 – Zbynek 2014-11-25 14:06:17