获取已过滤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;
不幸的是,这不适用于我 - dgDocRow没有属性DataMember - 可能是由于使用.NET 3.5? 我开发的应用程序是针对Windows CE的,所以我必须在VS 2008中开发它,新版本不支持Compact Framework – Zbynek 2014-11-25 13:55:19
尝试传递string.Empty而不是DataMember。 – 2014-11-25 13:59:22
Wonderfull!万分感谢。 – Zbynek 2014-11-25 14:06:17