数据绑定服务器控件

** 数据绑定服务器控件 **

数据绑定概述和语法
ASP.NET 引入了新的声明性数据绑定语法。这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性、集合、表达式甚至是从方法调用返回的结果。下表显示了新语法的一些示例。

简单属性 Customer: ```

custID

1集合 Orders:

<asp:listbox datasource="```

myArray

1表达式 Contact: ```
2# ( customer.First Name + " " + customer.LastName ) 

方法结果 Outstanding Balance: ```

GetBalance(custID)

 1  
 2尽管该语法看起来与 ASP 的 Response.Write 快捷方式 ```
 3= 
 4``` 相似,但其行为完全不同。ASP Response.Write 快捷方式语法在处理页时计算,而 ASP.NET 数据绑定语法仅在调用 DataBind 方法时计算。   
 5  
 6DataBind 是页和所有服务器控件的方法。当在父控件上调用 DataBind 时,它级联到该控件的所有子控件。例如,DataList1.DataBind() 将因此对 DataList 模板中的每一控件调用 DataBind 方法。在页上调用 DataBind — Page.DataBind() 或只是 DataBind() — 会导致计算页上的所有数据绑定表达式。通常从 Page_Load 事件调用 DataBind,如下例所示。   
 7  
 8  
 9protected void Page_Load(Object Src, EventArgs E) {   
10DataBind();   
11}   
12  
13  
14Protected Sub Page_Load(Src As Object, E As EventArgs)   
15DataBind()   
16End Sub   
17  
18  
19protected function Page_Load(Src:Object, E:EventArgs) : void {   
20DataBind();   
21}   
22  
23如果绑定表达式在运行时计算为预期的数据类型,则可以在 .aspx 页的声明节中的几乎任何位置使用绑定表达式。上面的简单属性、表达式和方法示例在计算时向用户显示文本。这些情况下,数据绑定表达式必须计算为 String 类型的值。在集合示例中,数据绑定表达式计算为 ListBox 的 DataSource 属性的有效类型值。您可能会发现有必要转换绑定表达式中的类型值以产生所需的结果。例如,如果 count 是整数:   
24  
25  
26Number of Records: ```
27# count.ToString() 

绑定到简单属性
ASP.NET 数据绑定语法支持绑定到公共变量、页的属性和页上其他控件的属性。

下面的示例说明如何绑定到公共变量和页上的简单属性。注意这些值在 DataBind() 调用前初始化。

到页属性的数据绑定

客户:```

custID

 1未结的订单:<b>```
 2# orderCount 
 3```</b>
 4</form>
 5</body>
 6</html>   
 7  
 8下面的示例说明如何绑定到另一控件的属性。   
 9  
10<html>
11<head>
12<script language="C#" runat="server">   
13  
14void SubmitBtn_Click(Object sender, EventArgs e) {   
15  
16// 仅调用“Page.DataBind”,而不是从“StateList”   
17// 中显式取出变量,然后操作标签控件。   
18// 这将计算页内所有的 ```
19# 
20``` 表达式   
21  
22Page.DataBind();   
23}   
24  
25</script>
26</head>
27<body>
28<h3><font face="宋体">到另一个服务器控件的属性的数据绑定</font></h3>
29<form runat="server">
30<asp:dropdownlist id="StateList" runat="server">
31<asp:listitem>CA</asp:listitem>
32<asp:listitem>IN</asp:listitem>
33<asp:listitem>KS</asp:listitem>
34<asp:listitem>MD</asp:listitem>
35<asp:listitem>MI</asp:listitem>
36<asp:listitem>OR</asp:listitem>
37<asp:listitem>TN</asp:listitem>
38<asp:listitem>UT</asp:listitem>
39</asp:dropdownlist>
40<asp:button onclick="SubmitBtn_Click" runat="server/" text="提交">
41<p>   
42  
43选定的州:<asp:label runat="server/" text="```
44# StateList.SelectedItem.Text 
45```">
46</asp:label></p></asp:button></form>
47</body>
48</html>   
49
50
51绑定到集合和列表   
52  
53像 DataGrid、ListBox 和 HTMLSelect 这样的列表服务器控件将集合用作数据源。下面的示例说明如何绑定到通常的公共语言运行库集合类型。这些控件只能绑定到支持 IEnumerable、ICollection 或 IListSource 接口的集合。最常见的是绑定到 ArrayList、Hashtable、DataView 和 DataReader。   
54  
55  
56下面的示例说明如何绑定到 ArrayList。   
57  
58<html>
59<head>
60<script language="C#" runat="server">   
61  
62void Page_Load(Object Sender, EventArgs E) {   
63  
64if (!Page.IsPostBack) {   
65  
66ArrayList values = new ArrayList();   
67  
68values.Add ("IN");   
69values.Add ("KS");   
70values.Add ("MD");   
71values.Add ("MI");   
72values.Add ("OR");   
73values.Add ("TN");   
74  
75DropDown1.DataSource = values;   
76DropDown1.DataBind();   
77}   
78}   
79  
80void SubmitBtn_Click(Object sender, EventArgs e) {   
81Label1.Text = "您选择了:" + DropDown1.SelectedItem.Text;   
82}   
83  
84</script>
85</head>
86<body>
87<h3><font face="宋体">数据绑定 DropDownList</font></h3>
88<form runat="server">
89<asp:dropdownlist id="DropDown1" runat="server"></asp:dropdownlist>
90<asp:button onclick="SubmitBtn_Click" runat="server/" text="提交">
91<p>
92<asp:label font-name="宋体" font-size="10.5pt" id="Label1" runat="server"></asp:label>
93</p></asp:button></form>
94</body>
95</html>   
96  
97下面的示例说明如何绑定到 DataView。注意 DataView 类在 System.Data 命名空间中定义。   
98  

@ Import namespace="System.Data"

 1  
 2<html>
 3<head>
 4<script language="C#" runat="server">   
 5  
 6void Page_Load(Object sender, EventArgs e ) {   
 7  
 8if (!Page.IsPostBack) {   
 9  
10DataTable dt = new DataTable();   
11DataRow dr;   
12  
13dt.Columns.Add(new DataColumn("整数值", typeof(Int32)));   
14dt.Columns.Add(new DataColumn("字符串值", typeof(string)));   
15dt.Columns.Add(new DataColumn("日期时间值", typeof(DateTime)));   
16dt.Columns.Add(new DataColumn("布尔值", typeof(bool)));   
17  
18for (int i = 1; i <= 9; i++) {   
19  
20dr = dt.NewRow();   
21  
22dr[0] = i;   
23dr[1] = "项 " + i.ToString();   
24dr[2] = DateTime.Now;   
25dr[3] = (i % 2 != 0) ? true : false;   
26  
27dt.Rows.Add(dr);   
28}   
29  
30dataGrid1.DataSource = new DataView(dt);   
31dataGrid1.DataBind();   
32}   
33}   
34  
35</script>
36</head>
37<body>
38<h3><font face="宋体">到 DataView 的数据绑定</font></h3>
39<form runat="server">
40<asp:datagrid bordercolor="black" borderwidth="1" cellpadding="3" cellspacing="0" gridlines="Both" headerstyle-backcolor="#aaaadd" id="dataGrid1" runat="server"></asp:datagrid>
41</form>
42</body>
43</html>   
44  
45  
46下面的示例说明如何绑定到 Hashtable。   
47<html>
48<head>
49<script language="C#" runat="server">   
50  
51void Page_Load(Object sender, EventArgs e) {   
52if (!Page.IsPostBack) {   
53  
54Hashtable h = new Hashtable();   
55h.Add ("键 1", "值 1");   
56h.Add ("键 2", "值 2");   
57h.Add ("键 3", "值 3");   
58  
59MyDataList.DataSource = h;   
60MyDataList.DataBind();   
61}   
62}   
63  
64</script>
65</head>
66<body>
67<h3><font face="宋体">到哈希表的数据绑定</font></h3>
68<form runat="server">
69<asp:datalist bordercolor="black" borderwidth="1" cellpadding="4" cellspacing="0" gridlines="Both" id="MyDataList" runat="server">
70<itemtemplate>   

((DictionaryEntry)Container.DataItem).Key

((DictionaryEntry)Container.DataItem).Value

 1</itemtemplate>
 2</asp:datalist>
 3</form>
 4</body>
 5</html>   
 6  
 7  
 8---  
 9绑定表达式或方法   
10  
11通常需要在绑定到页或控件之前操作数据。下面的示例说明如何绑定到表达式和方法的返回值。   
12<html>
13<head>
14<script language="C#" runat="server">   
15  
16void Page_Load(Object Src, EventArgs E) {   
17  
18if (!Page.IsPostBack) {   
19  
20ArrayList values = new ArrayList();   
21  
22values.Add (0);   
23values.Add (1);   
24values.Add (2);   
25values.Add (3);   
26values.Add (4);   
27values.Add (5);   
28values.Add (6);   
29  
30DataList1.DataSource = values;   
31DataList1.DataBind();   
32}   
33}   
34  
35String EvenOrOdd(int number) {   
36if ((number % 2) == 0)   
37return "偶数";   
38else   
39return "奇数";   
40}   
41  
42</script>
43</head>
44<body>
45<h3><font face="宋体">到方法和表达式的数据绑定</font></h3>
46<form runat="server">
47<asp:datalist bordercolor="black" borderwidth="1" cellpadding="3" cellspacing="0" gridlines="Both" id="DataList1" runat="server">
48<itemtemplate>   
49数字值:```
50# Container.DataItem 

偶/奇:```

EvenOrOdd((int) Container.DataItem)

 1</itemtemplate>
 2</asp:datalist>
 3</form>
 4</body>
 5</html>   
 6DataBinder.Eval   
 7  
 8ASP.NET 框架提供了一种静态方法,计算后期绑定的数据绑定表达式并且可选择将结果格式化为字符串。DataBinder.Eval 很方便,因为它消除了开发人员为强迫将值转换为所需的数据类型而必须做的许多显式转换。这在数据绑定模板列表内的控件时尤其有用,因为通常数据行和数据字段的类型都必须转换。   
 9  
10请看下面的示例,本例中整数将显示为货币字符串。使用标准的 ASP.NET 数据绑定语法,必须首先转换数据行的类型以便检索数据字段 IntegerValue。下一步,将此作为参数传递给 String.Format 方法。   
11  
12  

String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"])

1  
2  

String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue")))

1  
2  

String.Format("{0:c}", (DataRowView(Container.DataItem))["IntegerValue"])

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

DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}")

1  
2  

DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}")

1  
2  

DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}")

 1  
 2  
 3C# VB JScript   
 4  
 5  
 6  
 7格式字符串参数是可选的。如果省略它,则 DataBinder.Eval 返回对象类型的值,如下例所示。   
 8  
 9  
10  

(bool)DataBinder.Eval(Container.DataItem, "BoolValue")

1  
2  

CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean)

1  
2  

Boolean(DataBinder.Eval(Container.DataItem, "BoolValue"))

1  
2  
3C# VB JScript   
4  
5  
6  
7DataBinder.Eval 会对标准数据绑定语法带来很明显的性能损失,因为它使用后期绑定反射,注意这一点很重要。使用 DataBinder.Eval 时需谨慎,尤其是在不需要字符串格式化时。   
8  

@ Import namespace="System.Data"

 1  
 2<html>
 3<head>
 4<script language="C#" runat="server">   
 5  
 6void Page_Load(Object sender, EventArgs e) {   
 7  
 8if (!Page.IsPostBack) {   
 9  
10DataTable dt = new DataTable();   
11DataRow dr;   
12  
13dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));   
14dt.Columns.Add(new DataColumn("StringValue", typeof(string)));   
15dt.Columns.Add(new DataColumn("DateTimeValue", typeof(DateTime)));   
16dt.Columns.Add(new DataColumn("BoolValue", typeof(bool)));   
17  
18for (int i = 0; i < 9; i++) {   
19  
20dr = dt.NewRow();   
21  
22dr[0] = i;   
23dr[1] = "项 " + i.ToString();   
24dr[2] = DateTime.Now;   
25dr[3] = (i % 2 != 0) ? true : false;   
26  
27dt.Rows.Add(dr);   
28}   
29  
30dataList1.DataSource = new DataView(dt);   
31dataList1.DataBind();   
32}   
33}   
34  
35</script>
36</head>
37<body>
38<h3><font face="宋体">使用 DataBinder.Eval 进行数据绑定</font></h3>
39<form runat="server">
40<asp:datalist bordercolor="black" borderwidth="1" cellpadding="4" cellspacing="0" gridlines="Both" id="dataList1" repeatcolumns="3" runat="server" width="80%">
41<itemtemplate>   
42  
43订购日期:```
44# DataBinder.Eval(Container.DataItem, "DateTimeValue", "{0:d}") 

数量:```

DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:N2}")

1  
2<p>   
3  
4项:```
5# DataBinder.Eval(Container.DataItem, "StringValue") 

订购日期: <asp:checkbox checked='```

(bool)DataBinder.Eval(Container.DataItem, "BoolValue")

1<p>
2</p></asp:checkbox></p></p></itemtemplate>
3</asp:datalist>
4</form>
5</body>
6</html>   
7  
8  
9**全文完,整理自microsoft by KingApex(wangfeng66)**</asp:listbox>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus