datagrid1.databind();
}
}
</script>
</head>
<body>
<h3><font face="宋体">到 dataview 的数据绑定</font></h3>
<form runat=server>
<asp:datagrid id="datagrid1" runat="server"
bordercolor="black"
borderwidth="1"
gridlines="both"
cellpadding="3"
cellspacing="0"
headerstyle-backcolor="#aaaadd"
/>
</form>
</body>
</html>
下面的示例说明如何绑定到 hashtable。
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender, eventargs e) {
if (!page.ispostback) {
hashtable h = new hashtable();
h.add ("键 1", "值 1");
h.add ("键 2", "值 2");
h.add ("键 3", "值 3");
mydatalist.datasource = h;
mydatalist.databind();
}
}
</script>
</head>
<body>
<h3><font face="宋体">到哈希表的数据绑定</font></h3>
<form runat=server>
<asp:datalist id="mydatalist" runat="server"
bordercolor="black"
borderwidth="1"
gridlines="both"
cellpadding="4"
cellspacing="0"
>
<itemtemplate>
<%# ((dictionaryentry)container.dataitem).key %> :
<%# ((dictionaryentry)container.dataitem).value %>
</itemtemplate>
</asp:datalist>
</form>
</body>
</html>
通常需要在绑定到页或控件之前操作数据。下面的示例说明如何绑定到表达式和方法的返回值。
<html>
<head>
<script language="c#" runat="server">
void page_load(object src, eventargs e) {
if (!page.ispostback) {
arraylist values = new arraylist();
values.add (0);
values.add (1);
values.add (2);
values.add (3);
values.add (4);
values.add (5);
values.add (6);
datalist1.datasource = values;
datalist1.databind();
}
}
string evenorodd(int number) {
if ((number % 2) == 0)
return "偶数";
else
return "奇数";
}
</script>
</head>
<body>
<h3><font face="宋体">到方法和表达式的数据绑定</font></h3>
<form runat=server>
<asp:datalist id="datalist1" runat="server"
bordercolor="black"
borderwidth="1"
gridlines="both"
cellpadding="3"
cellspacing="0"
>
<itemtemplate>
数字值:<%# container.dataitem %>
偶/奇:<%# evenorodd((int) container.dataitem) %>
</itemtemplate>
</asp:datalist>
</form>
</body>
</html>
databinder.eval
asp.net 框架提供了一种静态方法,计算后期绑定的数据绑定表达式并且可选择将结果格式化为字符串。databinder.eval 很方便,因为它消除了开发人员为强迫将值转换为所需的数据类型而必须做的许多显式转换。这在数据绑定模板列表内的控件时尤其有用,因为通常数据行和数据字段的类型都必须转换。
请看下面的示例,本例中整数将显示为货币字符串。使用标准的 asp.net 数据绑定语法,必须首先转换数据行的类型以便检索数据字段 integervalue。下一步,将此作为参数传递给 string.format 方法。
<%# string.format("{0:c}", ((datarowview)container.dataitem)["integervalue"]) %>
<%# string.format("{0:c}", (ctype(container.dataitem, datarowview)("integervalue"))) %>
<%# string.format("{0:c}", (datarowview(container.dataitem))["integervalue"]) %>
c# vb jscript
该语法可能比较复杂,难以记忆。相反,databinder.eval 只是一个具有三个参数的方法:数据项的命名容器、数据字段名和格式字符串。在像 datalist、datagrid 或 repeater 这样的模板列表中,命名容器始终是 container.dataitem。page 是另一个可与 databinder.eval 一起使用的命名容器。
<%# databinder.eval(container.dataitem, "integervalue", "{0:c}") %>
<%# databinder.eval(container.dataitem, "integervalue", "{0:c}") %>
<%# databinder.eval(container.dataitem, "integervalue", "{0:c}") %>
c# vb jscript
格式字符串参数是可选的。如果省略它,则 databinder.eval 返回对象类型的值,如下例所示。
<%# (bool)databinder.eval(container.dataitem, "boolvalue") %>
<%# ctype(databinder.eval(container.dataitem, "boolvalue"), boolean) %>
<%# boolean(databinder.eval(container.dataitem, "boolvalue")) %>
c# vb jscript
databinder.eval 会对标准数据绑定语法带来很明显的性能损失,因为它使用后期绑定反射,注意这一点很重要。使用 databinder.eval 时需谨慎,尤其是在不需要字符串格式化时。
<%@ 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("integervalue", typeof(int32)));
dt.columns.add(new datacolumn("stringvalue", typeof(string)));
dt.columns.add(new datacolumn("datetimevalue", typeof(datetime)));
dt.columns.add(new datacolumn("boolvalue", typeof(bool)));
for (int i = 0; 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);
}
datalist1.datasource = new dataview(dt);
datalist1.databind();
}
}
</script>
</head>
<body>
<h3><font face="宋体">使用 databinder.eval 进行数据绑定</font></h3>
<form runat=server>