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,實現顯示更改和已經刪除的行、改動前的原始行、未更改的行等子集。
總結
以上是生活随笔為你收集整理的DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Dubbo实战]dubbo + zoo
- 下一篇: vector 源码及使用