有時候我們需要在控件中綁定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,實作顯示更改和已經删除的行、修改前的原始行、未更改的行等子集。