在上一节中我们介绍了<%# %> 语法,这种情况是Web 窗体有了明确的数据源,即Page.DataBind。这一小节我们来了解DataBind方法。
DataBind方法是ASP.NET中一个很重要的概念,几乎所有的控件都需要它控制数据的操作,它的作用是在为控件指定数据源后,执行数据绑定操作。在上一章的DataSet对象实例中我们已经使用过,利用这个方法为DataGrid控件绑定数据,即DataGrid.DataBind()。
ASP.NET可以使用DataBind方法来绑定数据的控件除了DataGrid,Repeater,DataList三个专用的数据绑定控件以外,还有些数据集合性质的Web控件,包括DropDownList,ListBox等,用来指定的数据源一般为数组(ArrayList)、哈稀表(HashTable)、数据表(DataTable)、 数据视图(DataView)和DataReader等。
下面我们利用这个方法为ListBox控件绑定数据源。
首先建立实例运行环境。打开Visual Studio.NET 2003 ,新建一个Web项目,命名为DataCon,新建一个窗体,命名为LBDataBind.aspx。在LBDataBind.aspx窗体中添加一个ListBox控件,如图9.1所示。
图9.1 为LBDataBind.aspx添加ListBox控件
LBDataBind.aspx页面的主要HTML代码如下:
<form id="Form1" method="post" runat="server">
<asp:ListBox id="ListBox1" runat="server"></asp:ListBox>
</form>
在LBDataBind.aspx的逻辑代码文件(LBDataBind.aspx.vb)中的Page_Load事件过程代码如下:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
Dim i, j As Int16 '声明两个整型变量,用于循环
Dim rd As Random = New Random
'声明一个随机变量,并实例化
Dim str As String
'声明一个字符串变量,用于生成的随机字符
Dim arr As ArrayList = New ArrayList
'声明一个数组,用来存放字符串
For i = 1 To 20
'执行外循环,每一次循环,生成一个项
str = "第" & i & "项--"
For j = 1 To 5
'执行内循环,循环5次,
'成生一个5个随机大写字母的字符串
str += Chr(rd.Next(65, 90))
Next
arr.Add(str)
'添加到数组中
str = ""
Next
ListBox1.DataSource = arr
'为LisBox1指定数据源
ListBox1.DataBind()
'使用DataBind方法,为控件绑定数据
End Sub
保存编译,运行结果如图9.2所示。
图9.2 LBDataBind.aspx运行结果
在上面这个实例中,我们使用了一个ListBox控件,但是我们并没有设置<asp:ListItem>属性,为其添加项目。在LBDataBind.aspx的逻辑代码里,我们利用随机数生成了一个含有20个项的数组(ArryList),我们为ListBox1指定这个数组为数据源,并使用DataBind方法为其执行数据绑定,这样就利用编程的方式实现了ListBox控件的数据绑定操作。
在上一节里,我们学习了<%# %> 语法,这里我们演示一下利用aspx文件的Page.DataBind 方法实现对整个页面的数据绑定。一旦aspx的整个页面被绑定后,页面内的数据都在监视之中。
在DataCon Web项目里新建一个窗体,命名为PageDataBind.aspx。在PageDataBind.aspx里添加一个DropDownList控件,主要HTML代码如下:
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<span style="BACKGROUND-COLOR: #cccccc">
请选择你最喜欢的体育运动:</span>
<p>
<asp:DropDownList
id="DropDownList1"
runat="server"
Width="104px"
Height="32px"
AutoPostBack="True">
<asp:ListItem Value="跑步">跑步</asp:ListItem>
<asp:ListItem Value="骑马">骑马</asp:ListItem>
<asp:ListItem Value="射击">射击</asp:ListItem>
<asp:ListItem Value="游泳">游泳</asp:ListItem>
<asp:ListItem Value="踢足球">踢足球</asp:ListItem>
<asp:ListItem Value="打篮球">打篮球</asp:ListItem>
<asp:ListItem Value="打网球">打网球</asp:ListItem>
<asp:ListItem Value="打乒乓球">打乒乓球</asp:ListItem>
<asp:ListItem Value="打羽毛球">打羽毛球</asp:ListItem>
</asp:DropDownList>
<p>
<span style="BACKGROUND-COLOR: #cccccc">你选择的是:<br>
<%# DropDownList1.SelectedValue %>
</span>
</FONT>
</form>
</body>
我们设置DropDownList1的AutoPostBack属性为"True",即该控件具有自动响应事件的能力,当列表框中的选定项发生变化时,会自动回传服务器上,并执行.NET框架委托的事件过程SelectedIndexChanged。我们为DropDownList1_SelectedIndexChanged事件过程编写的代码如下:
Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
'整个事件过程就一条语句,在执行该语句后,本aspx页面就被数据绑定
'当页面的数据变动时候,就可以利用<%# %>方法显示出来
Page.DataBind()
End Sub
保存编译,PageDataBind.aspx运行结果如图9.3所示。
图9.3 PageDataBind.aspx运行结果
在上一章里我们已经学习了用DataTable为DataGrid控件提供DataBind数据源,在DataView 实例里,我们也利用DataView对象来为DataGrid控件提供DataBind数据源,这里就不再赘述,读者可以翻看前一章的实例代码,仔细推敲其中的奥妙。