VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#高级编程之数据绑定深入理解

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  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所示。

C#高级编程:数据绑定深入理解

  图  25-8

  使用模板和数据绑定控件可以完成许多任务,需要用一本书的篇幅来介绍。但是,这里介绍的内容已经足够您开始试用它们了。

  



相关教程