asp.net|對象|資料|顯示 在學習DataSet對象的時候,我們遇到一個概念:DataView。該對象表示對DataSet中的資料表的一種查看方式,系統預設的方式是將資料以表格的形式排列,並且資料是根據從資料表中讀取資料時行排列的順序,通常和涉及資料庫時的Sort Order或是在SQL語句中定義的排列依據(升序或降序等)。
使用DataView時候,可以根據不同的實際情況,來使用不同的排序依據(Sort)、過濾條件(Filter)或是尋找方法(Search)。
下面這個執行個體,我們將利用DataView對象,顯示同一個資料庫中的不同資料。
在Adodotnet web項目裡,添加一個Web表單命名為DataView.aspx,並添加三個Button控制項,分別時Button1(Text=”顯示全部資料”)、Button2(Text=”只顯示男生資料”)和Button3(Text=”只顯示女生資料”),添加一個DataGrid控制項,命名為DataView.aspx,設計視窗如圖8.11所示。
圖8.11 DataView.aspx的設計視窗
切換至DataView.aspx的HTML視窗,主要HTML代碼如下:
<form id="Form1" method="post" runat="server">
<FONT face="宋體">利用DataView過濾資料
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 40px" runat="server"
Text="顯示全部資料 " Width="105px" Height="32px"></asp:Button>
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 40px" runat="server"
Text="只顯示男生資料" Width="105px" Height="32px"></asp:Button>
<asp:Button id="Button3" style="Z-INDEX: 103; LEFT: 216px; POSITION: absolute; TOP: 40px" runat="server"
Text="只顯示女生資料" Width="105" Height="32"></asp:Button>
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 104; LEFT: 8px; POSITION: absolute; TOP: 80px" runat="server"
Width="328px" Height="128px" Font-Size="X-Small"></asp:DataGrid></FONT>
</form>
DataView.aspx的邏輯代碼如下:
'--------code begin -------
Imports System.Web
Imports System.Data
Public Class DataView
Inherits System.Web.UI.Page
#Region " Web Form設計器產生的程式碼 "
'此處省略了表單設計器產生的程式碼,以節約篇幅
#End Region
Public rowfilter As String = "null"
'聲明該Web Form的全域變數,用來儲存DataView對象的過濾條件,
'初始化預設為null,即不過濾
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此處放置初始化頁的使用者代碼
'調用或去資料的過程
getdata()
End Sub
'編寫通用過程getdata,該過程用於或去資料,並根據過濾條件產生視圖
Sub getdata()
'在此處放置初始化頁的使用者代碼
Dim connstr As String '聲明資料庫連接字元
Dim mycon As OleDb.OleDbConnection
'因為使用Aeecss資料庫,所以聲明OleDConnention對象
Dim mycmd As OleDb.OleDbDataAdapter
'聲明DataAdapter對象
Dim mysql As String
'聲明Command命令的 SQL字串
' Try
connstr = "provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath(".") + "\StudentInfor.mdb"
'為連接字串賦值
mycon = New OleDb.OleDbConnection(connstr)
'執行個體化Connection對象
mysql = "Select * from student"
'設定SQL語句,即查詢資料庫中所有內容
mycmd = New OleDb.OleDbDataAdapter(mysql, mycon)
'執行個體化DataAdapter對象
Dim mydataset As Data.DataSet
'聲明DataSet對象
mydataset = New Data.DataSet
'執行個體化DataSet對象
mycmd.Fill(mydataset, "student")
'利用DataAdapter對象的Fill方法填充mydataset對象,
'填充到mydataset中的資料表名稱為student
Dim dv As Data.DataView
dv = New Data.DataView(mydataset.Tables("student"))
'mydataset.Tables(0)表示視圖建立在哪一個資料表上,
'Tables(0)表示在DataSet裡資料表的索引項目,從0開始,
' 這條語句等同與 dv = New Data.DataView(mydataset.Tables("student" ))
'判斷過濾條件,然後根據過濾條件產生視圖
Select Case rowfilter
Case "null"
'如果是"null",即為不過慮
Case "男"
dv.RowFilter = "sex='男'"
'只顯示男生資料
Case "女"
dv.RowFilter = "sex='女'"
'只顯示女生資料
End Select
DataGrid1.DataSource = dv
'DataGrid1控制項添加資料來源,即mydataset對象
'DataGrid1控制項指定資料表
DataGrid1.DataBind()
' Catch ex As Exception
'如果出現錯誤,輸出錯誤資訊
' Response.Write("程式出現錯誤, 錯誤資訊如下: <br>" & ex.Message)
' Finally
mycon.Close() '關閉資料連線
' End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
rowfilter = "null"
getdata()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
rowfilter = "男"
getdata()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
rowfilter = "女"
getdata()
End Sub
End Class
'-------code end -------------
儲存編譯後,通過瀏覽器預覽,如圖8.12所示。
圖8.12 DataView.aspx運行效果
當然,如果只是為了過濾資料,完全可以在SQL語句裡加入”Where Sex=’男’”。DataView的功能是很豐富的,它可以使用多種複合控制項綁定到同一個資料表上。有興趣的讀者可以編寫代碼來驗證,篇幅有限,這裡就不再舉例示範。
8.4 本章小結
本章詳細的介紹了ADO.NET資料訪問技術。ADO.NET資料庫訪問技術是新一代的資料存取技術,它採用離線的方式從資料庫中存取資料,提高了分布式應用程式的效率和擴充性。ADO.NET的關鍵技術式DataSet資料模型,在ADO.NET裡,所有程式是以資料為中心的,通過對XML的支援,使得ADO.NET具有良好的擴充性和相容性。通過DataSet類的記憶體資料庫技術,使得對伺服器資源的開銷降到了最低。而DataSet對象通過對資料格式到XML的轉換,可以輕而易舉地穿透公司防火牆,或進行進行異構節點的資料轉送。
在ASP.NET裡,ADO.NET資料庫訪問技術是資料操作的核心和根本,在結合ASP.NET的資料繫結控制項使用,將會高效地建立企業資料庫應用環境。在下一章,我們將詳細學習資料繫結控制項。