天天看點

DataSource綁定DataTable.Select()顯示system.data.DataRow問題解決辦法

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

繼續閱讀