有時候我們須要在控件中綁定DataTable中設定條件過濾后的數據,此時,在winForm環境中,一些控件不能正確綁定並顯示數據內容。這是由於DataTable.Select()返回的是DataRow[]類型的行數組。沒有行列相關架構值。而控件如ListBox、comboBox等不能識別行數組中的列。讀不到行列架構值,所以無法正常顯示。
解決的方法是用DataView進行轉換,即在DataView中對DataTable過濾數據。
DataView構造函數例如以下:
DataView ( DataTable dt, String RowFilter, String SorColName, DataViewRowState)
dt 用於獲取或設置源
RowFilter 獲取或設置用於篩選在 DataView 中查看哪些行的表達式
SorColName 獲取或設置 DataView 的一個或多個排序列以及排序順序
DataViewRowState 具體取值及功能見下表:
Added | 一個新行。 | |
CurrentRows | 包含未更改行、新行和已改動行的當前行。 默認情況下。DataViewRowState 項設置當前行。 | |
Deleted | 已刪除的行。 | |
ModifiedCurrent | 已改動的原始數據的當前版本號(請參見 ModifiedOriginal)。 | |
ModifiedOriginal | 已改動的數據的原始版本號。(雖然此數據已被改動,它仍作為 ModifiedCurrent 可用)。 | |
None | 無。 | |
OriginalRows | 包含未更改行和已刪除行的原始行。 | |
Unchanged | 未更改的行。 |
Count 在應用RowFilter后,獲取DataView中的行數
應用例子:
DataTable jgbjlx = getDataTable( "jgbjlx");
jgbjlxcomboBox.DisplayMember = "jgname";
jgbjlxcomboBox.ValueMember = "id";
jgbjlxcomboBox.DataSource = new DataView(jgbjlx , "id>0","id",DataViewRowState.CurrentRows);
使用DataView還能夠依據行的狀態設置DataViewRowState,實現顯示更改和已經刪除的行、改動前的原始行、未更改的行等子集。