在学习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 窗体设计器生成的代码 "
'此处省略了窗体设计器生成的代码,以节约篇幅
#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的转换,可以轻而易举地穿透公司防火墙,或进行进行异构节点的数据传输。