数据绑定服务器控件 数据绑定概述和语法 绑定到集合和列表
asp.net 引入了新的声明性数据绑定语法。这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性、集合、表达式甚至是从方法调用返回的结果。下表显示了新语法的一些示例。
简单属性 customer: <%# custid %>
集合 orders: <asp:listbox id="list1" datasource='<%# myarray %>' runat="server">
表达式 contact: <%# ( customer.first name + " " + customer.lastname ) %>
方法结果 outstanding balance: <%# getbalance(custid) %>
尽管该语法看起来与 asp 的 response.write 快捷方式 <%= %> 相似,但其行为完全不同。asp response.write 快捷方式语法在处理页时计算,而 asp.net 数据绑定语法仅在调用 databind 方法时计算。
databind 是页和所有服务器控件的方法。当在父控件上调用 databind 时,它级联到该控件的所有子控件。例如,datalist1.databind() 将因此对 datalist 模板中的每一控件调用 databind 方法。在页上调用 databind — page.databind() 或只是 databind() — 会导致计算页上的所有数据绑定表达式。通常从 page_load 事件调用 databind,如下例所示。
protected void page_load(object src, eventargs e) {
databind();
}
protected sub page_load(src as object, e as eventargs)
databind()
end sub
protected function page_load(src:object, e:eventargs) : void {
databind();
}
如果绑定表达式在运行时计算为预期的数据类型,则可以在 .aspx 页的声明节中的几乎任何位置使用绑定表达式。上面的简单属性、表达式和方法示例在计算时向用户显示文本。这些情况下,数据绑定表达式必须计算为 string 类型的值。在集合示例中,数据绑定表达式计算为 listbox 的 datasource 属性的有效类型值。您可能会发现有必要转换绑定表达式中的类型值以产生所需的结果。例如,如果 count 是整数:
number of records: <%# count.tostring() %>
绑定到简单属性
asp.net 数据绑定语法支持绑定到公共变量、页的属性和页上其他控件的属性。
下面的示例说明如何绑定到公共变量和页上的简单属性。注意这些值在 databind() 调用前初始化。
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender, eventargs e) {
page.databind();
}
string custid{
get {
return "alfki";
}
}
int ordercount{
get {
return 11;
}
}
</script>
</head>
<body>
<h3><font face="宋体">到页属性的数据绑定</font></h3>
<form runat=server>
客户:<b><%# custid %></b><br>
未结的订单:<b><%# ordercount %></b>
</form>
</body>
</html>
下面的示例说明如何绑定到另一控件的属性。
<html>
<head>
<script language="c#" runat="server">
void submitbtn_click(object sender, eventargs e) {
// 仅调用“page.databind”,而不是从“statelist”
// 中显式取出变量,然后操作标签控件。
// 这将计算页内所有的 <%# %> 表达式
page.databind();
}
</script>
</head>
<body>
<h3><font face="宋体">到另一个服务器控件的属性的数据绑定</font></h3>
<form runat=server>
<asp:dropdownlist id="statelist" runat="server">
<asp:listitem>ca</asp:listitem>
<asp:listitem>in</asp:listitem>
<asp:listitem>ks</asp:listitem>
<asp:listitem>md</asp:listitem>
<asp:listitem>mi</asp:listitem>
<asp:listitem>or</asp:listitem>
<asp:listitem>tn</asp:listitem>
<asp:listitem>ut</asp:listitem>
</asp:dropdownlist>
<asp:button text="提交" onclick="submitbtn_click" runat=server/>
<p>
选定的州:<asp:label text='<%# statelist.selecteditem.text %>' runat=server/>
</form>
</body>
</html>
像 datagrid、listbox 和 htmlselect 这样的列表服务器控件将集合用作数据源。下面的示例说明如何绑定到通常的公共语言运行库集合类型。这些控件只能绑定到支持 ienumerable、icollection 或 ilistsource 接口的集合。最常见的是绑定到 arraylist、hashtable、dataview 和 datareader。
下面的示例说明如何绑定到 arraylist。
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender, eventargs e) {
if (!page.ispostback) {
arraylist values = new arraylist();
values.add ("in");
values.add ("ks");
values.add ("md");
values.add ("mi");
values.add ("or");
values.add ("tn");
dropdown1.datasource = values;
dropdown1.databind();
}
}
void submitbtn_click(object sender, eventargs e) {
label1.text = "您选择了:" + dropdown1.selecteditem.text;
}
</script>
</head>
<body>
<h3><font face="宋体">数据绑定 dropdownlist</font></h3>
<form runat=server>
<asp:dropdownlist id="dropdown1" runat="server" />
<asp:button text="提交" onclick="submitbtn_click" runat=server/>
<p>
<asp:label id=label1 font-name="宋体" font-size="10.5pt" runat="server" />
</form>
</body>
</html>
下面的示例说明如何绑定到 dataview。注意 dataview 类在 system.data 命名空间中定义。
<%@ import namespace="system.data" %>
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender, eventargs e ) {
if (!page.ispostback) {
datatable dt = new datatable();
datarow dr;
dt.columns.add(new datacolumn("整数值", typeof(int32)));
dt.columns.add(new datacolumn("字符串值", typeof(string)));
dt.columns.add(new datacolumn("日期时间值", typeof(datetime)));
dt.columns.add(new datacolumn("布尔值", typeof(bool)));
for (int i = 1; i <= 9; i++) {
dr = dt.newrow();
dr[0] = i;
dr[1] = "项 " + i.tostring();
dr[2] = datetime.now;
dr[3] = (i % 2 != 0) ? true : false;
dt.rows.add(dr);
}
datagrid1.datasource = new dataview(dt);