2014-11-25 91 views
3

我在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? (不通過全表,迭代這是我要做的事現在)

感謝,茲比涅克

回答

2

您可以通過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