国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

ADO.NET 2.0 - 如何建立一個 DataView

2019-11-18 16:54:50
字體:
供稿:網(wǎng)友

借助于DataView,我們便能夠為儲存于DataTable中的數(shù)據(jù)建立不同的視圖。比方說,通過DataView,您可以使用不同的排序順序檢視DataTable中的數(shù)據(jù),亦或是根據(jù)數(shù)據(jù)列狀態(tài)或篩選表達式來篩選DataTable中的資料。重要的是,當(dāng)我們需要替DataTable中的數(shù)據(jù)建立不同的視圖而且需要將這些數(shù)據(jù)綁定到窗體上的控件時,更需要使用DataView來完成。

 

DataView提供的是一種動態(tài)的數(shù)據(jù)視圖,也就是說,其內(nèi)容、排序順序、與成員會反應(yīng)出來源DataTable中的任何變更。顯然DataView與DataTable.Select方法有很大的不同,Select方法會根據(jù)特定的篩選表達式或排序順序從數(shù)據(jù)表中傳回一個DataRow對象數(shù)組,而且其成員與排序順序是靜態(tài)不變的。正由于DataView的動態(tài)反應(yīng)特性,因此非常適合用于數(shù)據(jù)綁定應(yīng)用程序。

 

DataView提供您單一數(shù)據(jù)集合的動態(tài)視圖,您可以對數(shù)據(jù)集合套用不同的排序順序和篩選條件,此點與SQL Server數(shù)據(jù)庫所提供的視圖(View)有點類似。然而,DataView與數(shù)據(jù)庫視圖仍然有相當(dāng)大的差異,因為DataView無法當(dāng)成數(shù)據(jù)表來使用,也無法提供連結(jié)數(shù)據(jù)表的視圖。此外,您不僅不能排除來源數(shù)據(jù)表中的字段,也不能額外加入來源數(shù)據(jù)表中不存在的字段(例如:表達式字段)。

 

您可以采用兩種方式來建立一個DataView。第一種方式是使用DataView建構(gòu)函式,第二種方式則是建立DataTable之DefaultView屬性的一個參考。本文將詳細(xì)探討如何使用這兩種方式來建立DataView。

 

使用DataView建構(gòu)函式

 

DataView建構(gòu)函式共提供下表所示的三個多載版本。

 

DataView建構(gòu)函式的多載版本
 
DataView()
 
DataView(ByVal table As DataTable)
 
DataView(ByVal table As DataTable, _
        ByVal RowFilter As String, _
        ByVal Sort As String, _
        ByVal RowState As DataViewRowState)
 


DataView建構(gòu)函式的第一個版本表示不使用任何參數(shù)來初始化DataView類別的新執(zhí)行個體。請注意,如果您采用此版本來建立DataView,必須在建立DataView對象后先設(shè)定Table屬性以便決定其來源DataTable,然后才能繼續(xù)設(shè)定其它屬性(RowFilter、Sort…等等)。

 

以下的程序代碼示范如何使用第一個版本的DataView建構(gòu)函式來建立DataView對象,以便篩選和排序數(shù)據(jù)集內(nèi)之「章立民工作室」數(shù)據(jù)表的數(shù)據(jù)列,并將DataGridView控件綁定至此DataView。我們發(fā)現(xiàn),DataGrid控件只會顯示出女性,并且數(shù)據(jù)會依姓名的筆畫順序由多至少排列。以下是本范例的程序代碼:

 

SqlDataAdapter1.Fill(Ds章立民工作室, "章立民工作室")
' 建立 DataView 對象
Dim dv As DataView = New DataView

' 由于采用沒有任何參數(shù)的 DataView 建構(gòu)函式來建立 DataView 對象,
' 因此必須先設(shè)定 Table 屬性以便決定其來源 DataTable
dv.Table = Ds章立民工作室.章立民工作室

' 設(shè)定排序順序以便依姓名的筆畫順序由多至少排列
dv.Sort = "姓名 DESC"

' 設(shè)定篩選條件以便只顯示出女性
dv.RowFilter = "性別 = '女'"

' 將 DataGridView 控件綁定至 DataView
DataGridView1.DataSource = dv

 

DataView建構(gòu)函式的第二個版本表示使用指定的DataTable來初始化DataView 類別的新執(zhí)行個體。

 

以下的程序代碼它示范如何使用第二個版本的DataView建構(gòu)函式來建立DataView對象,以便篩選和排序數(shù)據(jù)集內(nèi)之「章立民工作室」數(shù)據(jù)表的數(shù)據(jù)列,并將DataGridView控件綁定至此DataView。我們發(fā)現(xiàn),DataGridView控件只會顯示出「信息部」的員工數(shù)據(jù),并且數(shù)據(jù)會依照目前薪資由高至低排列:

 

SqlDataAdapter1.Fill(Ds章立民工作室, "章立民工作室")

' 建立 DataView 對象
Dim dv As DataView = New DataView(Ds章立民工作室.章立民工作室)

' 設(shè)定排序順序以便依目前薪資由高至低排列
dv.Sort = "目前薪資 DESC"

' 設(shè)定篩選條件以便只顯示出「信息部」的員工數(shù)據(jù)
dv.RowFilter = "部門 = '信息部'"

' 將 DataGridView 控件綁定至 DataView
Me.DataGridView1.DataSource = dv

 

DataView建構(gòu)函式的第三個版本表示使用指定的DataTable、RowFilter、Sort和DataViewRowState,來初始化DataView類別的新執(zhí)行個體。

 

以下的程序代碼它示范如何使用第三個版本的DataView建構(gòu)函式來建立DataView對象,以便篩選和排序數(shù)據(jù)集內(nèi)之「章立民工作室」數(shù)據(jù)表的數(shù)據(jù)列,并將DataGridView控件綁定至此DataView。我們發(fā)現(xiàn),DataGridView控件只會顯示出目前薪資大于49000元的員工數(shù)據(jù),并且數(shù)據(jù)會依照目前薪資由高至低排列:

 

SqlDataAdapter1.Fill(Ds章立民工作室, "章立民工作室")

' 建立 DataView 對象
Dim dv As DataView = New DataView( _
                             Ds章立民工作室.章立民工作室, _
                             "目前薪資> 49000", _
                             "目前薪資 DESC", _
                             DataViewRowState.CurrentRows)
' 將 DataGridView 控件綁定至 DataView

Me.DataGridView1.DataSource = dv

 

在此要特別提醒大家,當(dāng)DataView被建立時,以及當(dāng)Sort、RowFilter或RowStateFilter屬性有任何一個被修改時,都會重新建立DataView的索引。此意味著,如果您希望享有最佳的效能,應(yīng)該在建立DataView時,直接于建構(gòu)函式中指定排序順序或篩選條件。如果您于建立DataView時并未直接于建構(gòu)函式中指定排序順序或篩選條件,而是于建立DataView對象之后再設(shè)定其Sort、RowFilter或RowStateFilter屬性,將會導(dǎo)致DataView的索引被重新建立,而使得索引至少被建立兩次。

 

使用DataTable的DefaultView屬性

 

DataTable的DefaultView屬性會傳回一個以此DataTable作為來源數(shù)據(jù)表的DataView對象,您便讓您去排序、篩選、與搜尋DataTable中的數(shù)據(jù)列。如果您所建立的DataView要顯示出DataTable中的所有數(shù)據(jù)列并依照自然順序來排列,則使用DataTable的DefaultView屬性來建立DataView將是非常直接且便利的方式。

 

以執(zhí)行畫面如圖表1所示的程序而言,它使用DataTable的DefaultView屬性來建立DataView,以便一開始能夠于DataGrid控件中顯示出來源數(shù)據(jù)表的所有數(shù)據(jù)列,并讓使用者在執(zhí)行階段通過DataView來動態(tài)篩選數(shù)據(jù)。茲將程序代碼列示如下:

 

' DataView 對象的類別層級宣告
PRivate dv As DataView

Private Sub DemoForm5_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
  FillComboBoxDepartment()

  SqlDataAdapter1.Fill(Ds章立民工作室, "章立民工作室")

  ' 建立 DataView
  dv = Ds章立民工作室.章立民工作室.DefaultView

  ' 顯示 DataView 中的數(shù)據(jù)列數(shù)目
  txtRowCount.Text = dv.Count.ToString

  ' 將 DataGridView 控件綁定至 DataView
  Me.DataGridView1.DataSource = dv
End Sub

Private Sub FillComboBoxDepartment()
  ' 建立數(shù)據(jù)命令對象(亦即 SqlCommand 對象)
  Dim foxCMD As New SqlCommand
  foxCMD.Connection = SqlConnection1
  foxCMD.CommandText = "SELECT DISTINCT 部門 FROM dbo.章立民工作室"

  ' 開啟連接
  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

Private Sub btnFilter_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles btnFilter.Click
  dv.RowFilter = "部門= '" & _
    ComboBoxDepartment.SelectedItem.ToString() & "'"
  ' 顯示 DataView 中的數(shù)據(jù)列數(shù)目
  txtRowCount.Text = dv.Count.ToString
End Sub

http://www.survivalescaperooms.com/liminzhang/archive/2006/10/23/537518.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新民市| 剑阁县| 泰和县| 安国市| 寿光市| 大田县| 额尔古纳市| 海城市| 凤山县| 无锡市| 新晃| 乐平市| 蓬安县| 深圳市| 蕲春县| 荣成市| 嘉鱼县| 桐柏县| 翁源县| 静安区| 通州市| 枣强县| 托克逊县| 黑山县| 汉源县| 喀喇| 黄冈市| 祥云县| 莱芜市| 宁阳县| 余干县| 商南县| 沽源县| 桐城市| 邵武市| 洪洞县| 瑞丽市| 姜堰市| 天门市| 江口县| 东乌珠穆沁旗|