当前位置:首页 > .NET 2.0数据绑定原理

.NET 2.0数据绑定原理

点击次数:1307  更新日期:2010-12-27
\n

对于用.NET做开发的程序员,数据绑定是再熟悉不过的技术。数据绑定可以说是最令人愉快的功能之一。这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性、集合、表达式甚至是从方法调用返回的结果。下表显示了语法的一些例。

简单属性

Customer: <%# custID %>

集合

Orders: <asp:ListBox id=”List1″ datasource=’<%# myArray %>’ runat=”server”>

表达式

Contact: <%# ( customer.First Name + ” ” + customer.LastName ) %>

方法结果

Outstanding Balance: <%# GetBalance(custID) %>

一、简单属性绑定

对于第一种简单属性示例如下:

前台代码:




\n

后台代码:




\n

运行结果:


\n



尽管该语法看起来与 ASP 的 Response.Write 快捷方式 <%= %> 相似,但其行为完全不同。ASP Response.Write 快捷方式语法在处理页时计算,而 ASP.NET 数据绑定语法仅在调用 DataBind 方法时计算。

DataBind 是页和所有服务器控件的方法。当在父控件上调用 DataBind 时,它级联到该控件的所有子控件。例如,

DataList1.DataBind()

将因此对 DataList 模板中的每一控件调用 DataBind 方法。在页上调用 DataBind —

Page.DataBind()

或只是

DataBind()

— 会导致计算页上的所有数据绑定表达式。

下面我们这个是MSN上的一个绑定简单属性的例子,代码如下:

<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>

运行结果:


\n
\n



注意这些值在

DataBind()

调用前初始化,这个例子中定义了两个页面属性custID、orderCount,然后进行页面绑定。

二、绑定到集合和列表

像 GridView、DropDownList 这样的列表服务器控件将集合用作数据源。下面的示例说明如何绑定到通常的公共语言运行库集合类型。这些控件只能绑定到支持 IEnumerable、ICollection 或 IListSource 接口的集合。最常见的是绑定到 ArrayList、Hashtable、DataView 和 DataReader。

下面这个是MSN上将ArrayList绑定到DropDownList上的例子,代码如下:

<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>

下面我们再来看一个将ArrayList绑定到GridView的例子,代码如下:

<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”);

GridView1.DataSource = values;

GridView1.DataBind();

}

}

</script>

</head>

<body>

<h3><font face=”宋体”>数据绑定 GridView</font></h3>

<form id=”Form1″ runat=server>

<asp:GridView ID=”GridView1″ runat=”server” AutoGenerateColumns=”False”>

<Columns>

<asp:TemplateField>

<ItemTemplate>

<asp:Label ID=”Label1″ runat=”server”><%#Container.DataItem %></asp:Label>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

</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"]) %>

该语法可能比较复杂,难以记忆。相反,DataBinder.Eval 只是一个具有三个参数的方法:数据项的命名容器、数据字段名和格式字符串。在像 DataList、DataGrid 或 Repeater 这样的模板列表中,命名容器始终是 Container.DataItem。Page 是另一个可与 DataBinder.Eval 一起使用的命名容器。

<%# DataBinder.Eval(Container.DataItem, “IntegerValue”, “{0:c}”) %>

格式字符串参数是可选的。如果省略它,则 DataBinder.Eval 返回对象类型的值,如下例所示。

<%# (bool)DataBinder.Eval(Container.DataItem, “BoolValue”) %>


\n

来源:网络

\n