C#高级编程:数据绑定深入理解
2009-04-14 08:25:02 来源:WEB开发网1. 使用模板显示数据
另外两个数据显示控件是Repeater 和 DataList,要求使用模板来格式化要显示的数据。模板在ASP.NET中是HTML的参数化部分,用作某些控件的输出元素。它们可以定制如何将数据输出到浏览器上,不需要作太多的工作就可以得到专业级的显示结果。
有几个模板可用于定制列表的各个方面。对于Repeater 和 DataList来说,一个重要的模板是<ItemTemplate>,它可以用于显示每个数据项。在控件声明中声明这个模板(和其他模板),例如:
<asp:DataList Runat="server" ... >
<ItemTemplate>
...
</ItemTemplate>
</asp:DataList>
在模板声明中,一般是输出HTML的部分内容,参数是绑定到控件的数据。在输出这些参数时,应使用一种特殊的语法:
<%# expression %>
expression 是把参数绑定到页面或控件属性上的一个表达式,但它常常是由一个DataBinder.Eval()表达式组成。通过指定表中的列,这个函数可以从绑定到控件的表中输出数据,这可以使用下面的语法来实现:
<%# DataBinder.Eval(Container.DataItem, "ColumnName") %>
还有第三个可选参数,可以格式化返回的数据,它的语法与其他地方使用的字符串格式化表达式相同。表25-6列出了可用的模板以及它们的用法。
模 板 | 说 明 |
<ItemTemplate> | 列表项目使用的模板 |
<HeaderTemplate> | 列表前输出内容使用的模板 |
<FooterTemplate> | 列表后输出内容使用的模板 |
<SeparatorTemplate> | |
<AlternatingItemTemplate> | 其他项目使用的模板,有助于查看 |
<SelectedItemTemplate> | (只用于DataList) 列表中所选项目使用的模板 |
<EditItemTemplate> | (只用于DataList)用于列表中正在编辑的项目的模板 |
表 25-6
说明: 了解模板最简单的方式是使用一个示例,这可以在PCSWebApp3中使用现有的数据查询来完成。
2. 使用模板的示例
在页面的顶部扩展表格,使之包含一个DataList,显示存储在数据库中的每个会议。使这些会议成为可选择的,这样单击每个会议的名称,就可以显示它们的信息。
修改PCSWebApp3项目的WebForm1.aspx中的代码:
<tr>
<td align="center" colSpan=3>
<asp:ValidationSummary ID=validationSummary Runat="server"
HeaderText="Before submitting your request:"/>
</td>
</tr>
<tr>
<td align="left" colSpan="3" width="100%">
<table cellspacing="4">
<tr>
<td width="40%" bgcolor="#ccffcc" >
<asp:DataList Runat="server" ID="eventDetails2"
OnSelectedIndexChanged=
"eventDetails2_SelectedIndexChanged">
<ItemTemplate>
<asp:LinkButton Runat="server"
CommandFTEL="Select"
ForeColor="#0000ff"
ID="Linkbutton1"
CausesValidation="false">
<%# DataBinder.Eval(Container.DataItem,
"Name")%>
</asp:LinkButton>
<br>
</ItemTemplate>
<SelectedItemTemplate>
<b><%# DataBinder.Eval(Container.DataItem,
"Name") %></b>
<br>
</SelectedItemTemplate>
</asp:DataList>
</td>
<td valign="top">
<asp:Label Runat="server" ID="edName"
Font-FTEL="Arial" Font-Bold="True"
Font-Italic="True" Font-Size="14">
Select an event to view details.
</asp:Label>
<br>
<asp:Label Runat="server" ID="edDate"/>
<br>
<asp:Label Runat="server" ID="edRoom"/>
<br>
<asp:Label Runat="server" ID="edAttendees"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
我们添加了一个新的表行,其中包含一个表,该表中的一列是一个DataList,另一列是一个信息视图。信息视图中有4个标签表示会议属性,其中一个包含文本“Select an event to view details”。如果没有选择任何会议,则显示该文本,表示该窗体是第一次加载。
DataList使用<ItemTemplate> 和 <SelectedItemTemplate>显示会议信息。为了提供选择,对会议名称链接执行Select命令,该会议名称链接显示在<ItemTemplate>中,这样就可以自动修改选择。我们还使用了OnSelectedIndexChanged事件,当Select命令修改选择时触发这个事件,填充会议信息标签。如果双击设计器中的eventDetails2,就会得到如下的事件处理程序。还需要把方法的保护级别从protected改为private。(注意首先要执行DataBind()来更新选项):
private void eventDetails2_SelectedIndexChanged(object sender,
System.EventArgs e)
{
eventDetails2.DataBind();
DataRow selectedEventRow =
eventTable.Rows[eventDetails2.SelectedIndex];
edName.Text = (string)selectedEventRow["Name"];
edDate.Text = "<b>Date:</b> " +
((DateTime)selectedEventRow["EventDate"]).ToLongDateString();
edAttendees.Text = "<b>Attendees:</b> " +
(string)selectedEventRow["AttendeeList"];
DataRow selectedEventRoomRow =
ds.Tables["Rooms"].Rows[(int)selectedEventRow["Room"] - 1];
edRoom.Text = "<b>Room:</b> " + selectedEventRoomRow["Room"];
}
使用ds和eventTable中的数据填充信息视图。
与前面所用的DataGrid一样,需要为eventDetails2设置数据,并绑定到Page_Load()中:
eventDetails1.DataSource = eventTable;
eventDetails2.DataSource = eventTable;
...
eventDetails1.DataBind();
eventDetails2.DataBind();
重新绑定到submitButton_Click()中:
eventDetails1.DataBind();
eventDetails2.DataBind();
现在会议的详细信息就显示在表中,如图25-8所示。
图 25-8
使用模板和数据绑定控件可以完成许多任务,需要用一本书的篇幅来介绍。但是,这里介绍的内容已经足够您开始试用它们了。
相关阅读:
C#高级编程:定制日历控件
C#高级编程:给数据库添加会议数据
C#高级编程:会议登记 Web服务
C#高级编程 多种方式读写文本文件
赞助商链接