首页 | 免费域名 | 个人服务器 | 一流信息监控拦截系统 | 虚拟主机知识库 | ASP 空间 | ASP技术大全 | 下载中心 | 客户服务中心
  7i24 > ASP.Net技术大全 > ASP.Net快速入门 >
    7i24 .Com  
  ASP.NET(bata2)立即上手教程(c#版)-12

7i24.Com不停为您服务
ASP.NET(bata2)立即上手教程(c#版)-12 
wincheer

最近几天给电脑升级,重新安装了包括操作系统在内的所有东西。加上中间出了一点问题,所以这一部分的翻译停了好几天,今天才补上。
数据访问和定制

模板控件介绍
前面几个章节演示的DataGrid控件,对于许多需要使用类似表格那样来展示数据的web应用程序来说是非常适合的。但许多时候,需要用更丰富的形式来显示数据。Asp.net提供了两个控件,DataList和Repeater,对于类似列表的数据提供了非常灵活的控制方式。这两个控件是基于模板的,所以没有自己默认的表现。实施数据的方法完全由控件模板的执行,该模板描述如何呈现数据项目。
类似于DataGrid控件,DataList 和 Repeater支持DataSource属性,该属性可以被设置为任何ICollection, IEnumerable, 或 IListSource类型。DataSource(数据源)中的数据可以使用DataBind方法来绑定。数据一旦被绑定,每个数据项的格式就可以由模板来描述。
ItemTemplate 属性控制数据源集合中每个项目的展现。在ItemTemplate内部,你可以定义任意的表达代码(HTML 或者其他).
使用ASP.NET 的数据绑定语法,你可以从数据绑定中插入值到DataList 或 Repeater控件,就象下面这样。
<ASP:Repeater id="MyRepeater" runat="server">
  <ItemTemplate>
    Hello <%# DataBinder.Eval(Container.DataItem, "name") %> !
  </ItemTemplate>
</ASP:Repeater>
Container 从名称空间System.Web.UI.INamingContainer 直接继承。在这种情况下,Container 解析为一个System.Web.UI.WebControls.RepeaterItem类型的对象,他有一个DataItem属性。 就像Repeater 重复数据源集合一样,DataItem 包含该集合中的当前项。例如,如果雇员字段对象的数据源被设定为ArrayList,DataItem 就是雇员类型的。当绑定到DataView,DataItem 则是DataRowView类型 。
下面的例子演示了一个Repeater 控件绑定到DataView (从sql查询返回)。同时定义了两个模板:HeaderTemplate 和 FooterTemplate ,分别用来展示列表的开头和结尾。
C# DataList1.aspx
[运行] | [源代码]
Repeater控件用来重复数据源集合中的数据,为数据源集合中的每一个项目使用一次ItemTemplate,但是不显示任何没有包含在模板中的元素。相对于Repeater的重复数据, DataList提供了一些额外的功能来控制列表的布局。与Repeater不同,DataList 使用额外的语法元素,如包含风格属性的表的行、列和跨列等等,在模板定义之外来丰富外观的格式。例如,DataList支持RepeatColumns 和 RepeatDirection 属性,分别用来指定数据是否以多列的样式显示,以及优先排列的方向(水平或者垂直) DataList 也支持样式属性,如下面的代码:

<ASP:DataList runat="server" DataSource="<%#MyData%>"
  RepeatColumns="2"
  RepeatDirection="Horizontal"
  ItemStyle-Font-Size="10pt"
  ItemStyle-Font-Name="Verdana"
>
  ...
</ASP:DataList>
注意:本章的剩余部分集中讲解了DataList控件的许多功能。Repeater 空间的更多信息,参考本教材中“web form 控件参考”章节中的“repeater”主题。
下面的例子演示了DataList控件的用法。注意数据项的外观已经和上一个例子中的有所不同,其实仅仅改变了一下控件ItemTemplate的属性。RepeatDirection 和 RepeatColumns属性决定了ItemTemplates的显示样式。
C# DataList2.aspx
[运行] | [源代码]

下面的例子更进一步演示了通过改变ItemTemplate来达到模板的多姿多彩的变化。这次,DataItem的一个值使用<img>标签的"src"属性来替代。DataBinder.Eval的格式化字符串参数也在URL查询字符串中替换了DataItem的值。
C# DataList3.aspx
[运行] | [源代码]

处理模板中的返回
如同在DataGrid一样,你可以从DataList模板激活一条命令,该模板通过绑定到DataList自身来传递事件句柄。例如,ItemTemplate中的LinkButton可以激活Select命令。通过设定DataList的OnSelectedIndexChanged属性,能够调用一个事件句柄来响应这条命令。请看下面的代码:
<ASP:DataList id="MyDataList" OnSelectedIndexChanged="MyDataList_Select" runat="server">
  <ItemTemplate>
    <asp:linkbutton CommandName="Select" runat="server">
      <%# DataBinder.Eval(Container.DataItem, "title") %>
    </asp:linkbutton>
  </ItemTemplate>
</ASP:DataList>
下面的例子完整的演示了这一情况。在MyDataList_Select 事件句柄中,组合了几个其他的服务器控件,来表述被选中项目的详细资料。
C# DataList4.aspx
[运行] | [源代码]

注意,当DataList辨别一些特定的命令如Select和 Edit/Update/Cancel的时候,在模板中激活的命令字符串可以是任意的字符串。对于所有的命令, DataList的OnItemCommand 被激活。就像上面的例子一样,你可以绑定这个事件到事件句柄。
<script runat="server">
  protected void MyDataList_ItemCommand(Object sender, DataListCommandEventArgs e) {
    String command = e.CommandName;
    switch(command) {
     case "Discussions":
      ShowDiscussions((DataRowView)e.Item.DataItem); break;
     case "Ratings":
      ShowRatings((DataRowView)e.Item.DataItem); break;
    }
  }
</script>
<ASP:DataList id="MyDataList" OnItemCommand="MyDataList_ItemCommand" runat="server">
  <ItemTemplate>
    <asp:linkbutton CommandName="Ratings" runat="server">
      View Ratings
    </asp:linkbutton>
     <asp:linkbutton CommandName="Discuss" runat="server">
      View Discussions
    </asp:linkbutton>
  </ItemTemplate>
</ASP:DataList>

注意,由于不仅一个命令可以激活这个事件句柄,所以你必须使用选择语句来决定具体的命令。下面的例子演示了这种情况
C# DataList5.aspx
[运行] | [源代码]

使用选择和编辑模板
除了使用页面级的事件句柄来处理Select命令以外,也可以使用DataList来内部处理这种事件。如果为DataList定义了一个SelectedItemTemplate,DataList就会通过激活Select命令的数据项来实施这个模板。下面的例子中使用SelectedItemTemplate来使被选择的书名标题字体加粗。
C# DataList6.aspx
[运行] | [源代码]

DataList 还支持EditItemTemplate,来编辑索引值等于DataList的EditItemIndex属性的项目。关于编辑和更新工作的细节问题,参考本教材中“数据访问”章的“更新数据”主题。
C# DataList7.aspx
[运行] | [源代码]

在模板中查找控件
有些时候,我们很有必要查找包含在模板中的控件。如果在模板中给定了控件的ID号,那么就可以从他的容器(支持InamingContainer的父层中的第一个控件)中取得他的有关信息。在这种情况下,容器是DataListItem控件。注意,即使几个控件具有相同的ID号(具有DataList的循环优点),每一个也是被逻辑的包含在DataListItem容器控件的名称空间中。
你能够通过遍历DataList的Items集合来取得DataListItem,然后调用DataListItem的 FindControl方法(从Control基类继承而来)取回具有特定ID号的控件。
<script runat="server">
  public void Page_Load(Object sender, EventArgs E)) {
    // set datasource and call databind here
    for (int i=0; i<MyDataList.Items.Count; i++) {
      String isChecked = ((CheckBox) MyDataList.Items[i].FindControl("Save")).Checked.ToString();
      If (isChecked == "True") {
       ...
      }
    }
  }
</script>
<ASP:DataList id="MyDataList" runat="server">
  <ItemTemplate>
     <asp:CheckBox id="Save" runat="server"/> <b>Save to Favorites</b>
  </ItemTemplate>
</ASP:DataList>

下面的例子演示了刚才的技术。
C# DataList8.aspx
[运行] | [源代码]

本章小结
1.DataList和Repeater提供给开发者微调数据绑定列表的外观显示格式。
2.使用模板来表现绑定数据的显示,例如HeaderTemplate、FooterTemplate、或者ItemTemplate 。
3.Repeater控件是一般目的的重复,他的模板中没有的东西,都不会显示。
4.DataList 控件对项目的布局和样式提供了更多的控制,可以格式化输出自己的表现代码。
5.DataList 支持Select, Edit/Update/Cancel,以及 Item Command 事件。通过绑定事件句柄到DataList的 Command 事件,可以在页面级别处理Item Command。
6.DataList支持SelectedItemTemplate 和 EditItemTemplate 两个模板, 用来控制选定时的样式和编辑时的表现样式。
7.使用Control.FindControl方法,可以通过程序来取得模板中的控件。该方法通过DataList的项目集合 DataListItem调用。

============待续=========ASP.NET中文专业网

  2002年1月9日  阅读 1490 次  发送此页给朋友  来源:    版权争议  删除

相关文章:   近期热点:

上一篇: ASP.NET(bata2)立即上手教程(c#版)-11
下一篇: 在网页中动态的生成一个gif图片
返回上一层...
搜索:

(C)2004-2022 7i24.Com 保留所有权利