DataView 是 ADO.NET 中提供資料動態檢視的核心類別,它能針對單一 DataTable 建立多種排序、篩選的視圖,且內容會即時反映來源資料表的變更,極適合資料繫結案例。本文詳細說明兩種建立 DataView 的方式,並提供完整程式碼範例。
DataRow[] 陣列,結果不隨來源變更而更新。DataView 提供三個多載建構函式:
| 簽章 | 說明 |
|---|---|
DataView() | 無參數初始化,後續必須先設定 Table 屬性指定來源 DataTable。 |
DataView(DataTable table) | 指定來源 DataTable 初始化。 |
DataView(DataTable, RowFilter, Sort, RowState) | 一次指定來源、篩選、排序與列狀態,效能最佳(避免索引重建)。 |
SqlDataAdapter1.Fill(Ds章立民工作室, "章立民工作室")
Dim dv As New DataView()
dv.Table = Ds章立民工作室.章立民工作室 ' 必須先設定 Table
dv.Sort = "姓名 DESC"
dv.RowFilter = "性別 = '女'"
DataGridView1.DataSource = dv
Dim dv As New DataView(Ds章立民工作室.章立民工作室)
dv.Sort = "目前薪資 DESC"
dv.RowFilter = "部門 = '信息部'"
Me.DataGridView1.DataSource = dv
Dim dv As New DataView( _
Ds章立民工作室.章立民工作室, _
"目前薪資 > 49000", _
"目前薪資 DESC", _
DataViewRowState.CurrentRows)
Me.DataGridView1.DataSource = dv
> **效能提示**:在建構函式中直接指定 Sort/RowFilter/RowStateFilter,可避免索引被重建兩次。
DefaultView 回傳一個以該 DataTable 為來源的 DataView,適合「顯示所有資料、自然順序」的情境,也常作為後續動態篩選的基礎。
Private dv As DataView
Private Sub DemoForm5_Load(...) Handles MyBase.Load
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds章立民工作室, "章立民工作室")
dv = Ds章立民工作室.章立民工作室.DefaultView
txtRowCount.Text = dv.Count.ToString()
Me.DataGridView1.DataSource = dv
End Sub
Private Sub btnFilter_Click(...) Handles btnFilter.Click
dv.RowFilter = "部門 = '" & ComboBoxDepartment.SelectedItem.ToString() & "'"
txtRowCount.Text = dv.Count.ToString()
End Sub
Private Sub FillComboBoxDepartment()
Dim foxCMD As New SqlCommand("SELECT DISTINCT 部門 FROM dbo.章立民工作室", SqlConnection1)
SqlConnection1.Open()
Using myReader As SqlDataReader = foxCMD.ExecuteReader()
If myReader.HasRows Then
While myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
End While
End If
End Using
ComboBoxDepartment.SelectedIndex = 0
End Sub