首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

ADO.NET 2.0 深度解析:建立與應用 DataView 的完整指南

     編輯:關於.NET

DataView 是 ADO.NET 中提供資料動態檢視的核心類別,它能針對單一 DataTable 建立多種排序、篩選的視圖,且內容會即時反映來源資料表的變更,極適合資料繫結案例。本文詳細說明兩種建立 DataView 的方式,並提供完整程式碼範例。

DataView 與 DataTable.Select 的關鍵差異

  • DataView:動態視圖,排序/篩選條件改變時自動更新,支援資料繫結。
  • DataTable.Select:靜態方法,傳回 DataRow[] 陣列,結果不隨來源變更而更新。

方式一:使用 DataView 建構函式

DataView 提供三個多載建構函式:

簽章說明
DataView()無參數初始化,後續必須先設定 Table 屬性指定來源 DataTable。
DataView(DataTable table)指定來源 DataTable 初始化。
DataView(DataTable, RowFilter, Sort, RowState)一次指定來源、篩選、排序與列狀態,效能最佳(避免索引重建)。

範例 1:無參數建構函式

SqlDataAdapter1.Fill(Ds章立民工作室, "章立民工作室")
Dim dv As New DataView()
dv.Table = Ds章立民工作室.章立民工作室  ' 必須先設定 Table
dv.Sort = "姓名 DESC"
dv.RowFilter = "性別 = '女'"
DataGridView1.DataSource = dv

範例 2:指定 DataTable

Dim dv As New DataView(Ds章立民工作室.章立民工作室)
dv.Sort = "目前薪資 DESC"
dv.RowFilter = "部門 = '信息部'"
Me.DataGridView1.DataSource = dv

範例 3:完整參數(建議用法)

Dim dv As New DataView( _
    Ds章立民工作室.章立民工作室, _
    "目前薪資 > 49000", _
    "目前薪資 DESC", _
    DataViewRowState.CurrentRows)
Me.DataGridView1.DataSource = dv
> **效能提示**:在建構函式中直接指定 Sort/RowFilter/RowStateFilter,可避免索引被重建兩次。

方式二:使用 DataTable.DefaultView 屬性

DefaultView 回傳一個以該 DataTable 為來源的 DataView,適合「顯示所有資料、自然順序」的情境,也常作為後續動態篩選的基礎。

完整範例:搭配 ComboBox 動態篩選

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

總結

  • 需完整控制初始排序/篩選 → 使用 建構函式多載 3。
  • 需快速取得預設視圖並後續動態調整 → 使用 DefaultView。
  • DataView 的動態特性使其成為 Windows Forms / ASP.NET 資料繫結的首選。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved