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資料來源,這裡就不再贅述,讀者可以翻看前一章的執行個體代碼,仔細推敲其中的奧妙。