之前分享過幾篇文章:
在 GridView / ListView這種大型控制項(資料繫結控制項)裡面,只要作了「樣版(Template)」,
我們就會發現一些Web控制項可以跟資料庫的各個欄位結合,大多寫成
- <%# Bind("欄位名稱") %> ,就是雙向繫結。資料可以修改。
- 或是<%# Eval("欄位名稱") %> ,就是單向繫結,資料只能用來展示。
例如下面的範例:
01 <asp:GridView ID="GridView1" runat="server" DataKeyNames="id" DataSourceID="SqlDataSource1">
02
03 <Columns>
04 <asp:TemplateField HeaderText="分類" SortExpression="class">
05 <EditItemTemplate>
06 <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1"
07 DataTextField="class" DataValueField="class" SelectedValue='<%# Bind("class") %>'>
08 </asp:DropDownList>
09 </EditItemTemplate>
10 <ItemTemplate>
11 <asp:Label ID="Label1" runat="server" Text='<%# Bind("class") %>'></asp:Label>
12 </ItemTemplate>
13 </asp:TemplateField>
14
15 .....以下省略....
16 </asp:GridView>
今天看書的時候,又發現繫結運算式(Data Binding Expression) 原來可以這樣用
這邊要分享兩個小範例,可能不太實用。各位參考一下即可。
自己寫ADO.NET程式,透過繫結運算式,傳到前端HTML畫面的 Web控制項裡面。
-------------------------------------------------------------------------------------------------------
HTML設計畫面都一樣
各位可以看看下面兩個 Web控制項,使用了 <%# DBInit()%>
01 <asp:TextBox ID="TextBox1" runat="server" Height="200px"
02 TextMode="MultiLine"
03 Width="350px" Text="<%# DBInit()%>"></asp:TextBox>
04 <br />
05 <br />
06
07 <asp:DropDownList ID="DropDownList1" runat="server"
08 DataSource="<%# DBInit()%>" DataTextField="title"
09 DataValueField="id">
10 </asp:DropDownList>
-------------------------------------------------------------------------------------------------------
後置程式碼如下(VB語法)
1. DataSet 版
01 
Protected Sub Page_Load() Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
02
Page.DataBind() '==重點在此!沒這段的話,不會運作!!
03
End Sub 04
05
06 
Public Function DBInit() Function DBInit() As DataSet
07
'----連結資料庫----
08
Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString)
09
Dim myAdapter As SqlDataAdapter
10
myAdapter = New SqlDataAdapter("select top 10 id, title from test", Conn)
11
12
Dim ds As New DataSet()
13
14
'Conn.Open() '---- 不用寫,DataAdapter會自動開啟
15
myAdapter.Fill(ds, "test") '---- 這時候執行SQL指令。取出資料,放進 DataSet。
16
'Conn.Close() '---- 不用寫,DataAdapter會自動關閉
17
18
Return ds
19
End Function
執行結果:

2. DataReader 版
01 
Protected Sub Page_Load() Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
02
Page.DataBind() '==重點在此!沒這段的話,不會運作!!
03
End Sub 04
05
06 
Public Function DBInit() Function DBInit() As SqlDataReader
07
08
Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString)
09
Dim dr As SqlDataReader = Nothing
10
Dim cmd As SqlCommand = New SqlCommand("select top 10 id, title from test", Conn)
11
Conn.Open()
12
dr = cmd.ExecuteReader()
13
14
Return dr
15
16
cmd.Cancel()
17
dr.Close()
18
Conn.Close()
19
Conn.Dispose()
20
End Function
最重要的地方,還是那一行程式 -- Page.DataBind()
沒有作 DataBind()的話,那些繫結運算式(<%#Bind("xxx")%>)是不會動作的!
我臨時還想不到這樣的範例,可以用在哪些地方,
但畢竟也是一個有趣的用法。
於是自己作一個簡單的學習記錄
微軟官方文件如下:
完成後,請繼續觀賞本系列的第五篇文章 --
DataBinding?資料繫結?資料綁定? #5--繫結運算式 與 ListView的HyperLink(超連結)
...... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ................................................................................................................
ASP.NET專題實務
(文魁出版,VB版 P8187 / C#版P09027)
下集已經出版囉~~~ASP.NET專題實務II:範例應用與4.0新功能 
.............................................................................................................. 寄信給我 mis2000lab (at) 雅虎.com.台灣 ........