DataBinding?资料系结?资料绑定? #4--系结表达式原来可以这样用?(DataSet / DataReader)
http://www.dotblogs.com.tw/mis2000lab/archive/2008/12/29/databinding_expression_1229.aspx
之前分享过几篇文章:
- DataBinding?资料绑定?(2010-10-28 16:56)
- DataBinding?资料绑定?#1--DataSourceID与DataSource?(2010-10-28 17:14)
- DataBinding?资料绑定?#2--DataSet + 绑定表达式(2010-10-28 17:25)
- DataBinding?资料绑定?#3--以DropDownList为例 (2010-10-2817:31)
在 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("your_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("Your_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")%>)是不会动作的!
我临时还想不到这样的范例,可以用在哪些地方,
但毕竟也是一个有趣的用法。
于是自己作一个简单的学习记录
微软官方文件如下:
- 概观 http://msdn.microsoft.com/zh-tw/library/ms178366.aspx
- 语法 http://msdn.microsoft.com/zh-tw/library/bda9bbfx.aspx
2010/10/12补充:
以上面的方法来作另外一个习题,却发现另外一个有趣的东西,
请看: [习题]DataBinding?资料系结?资料绑定? #6 -- 伤脑筋的 GridView加总、小计