在ASP.NET 2.0中操作数据之三十一:使用DataList来一行显示多条记录

导言

  在前两章的做的DataList的例子里我们都是使用单列的HTML<table>来显示数据.而自定义使DataList将数据显示在多列多行的table里也非常容易.而且还可以以单行多列来显示数据.

  我们可以通过RepeatColumns和RepeatDirection属性来自定义DataList.这两个属性决定了数据显示时候的列数和方向(水平或垂直).图1是以一个3列的table来显示product信息的DataList例子.

图 1: DataList 一行显示三条product信息

通过一行显示多条记录,DataList可以更有效的利用屏幕的水平空间.在这章里我们将探讨这两个属性.

第一步: 在 DataList显示Product信息

  在学习RepeatColumns和RepeatDirection属性前,我们先用标准的单列多行DataList显示Product信息.我们使用下面的标记语言来显示product的name,category和price:

<h4>Product Name</h4>
Available in the Category Name store for Price

  在前面的教程里我们已经做过如何将数据绑定到DataList,因此这一步我们很快带过.打开DataListRepeaterBasics文件夹下的RepeatColumnAndDirection.aspx页,拖一个DataList进去.从DataList的智能标签里创建一个ObjectDataSource,使用ProductsBLL类的GetProducts方法配置.在INSERT,UPDATE和DELETE标签里选择None.

  在创建完ObjectDataSource并绑定到DataList后,Visual Studio会自动创建一个显示product字段的name和value的ItemTemplate.调整ItemTemplate— 通过直接修改标记语言或智能标签里的Edit Templates选项— 将Product Name, Category Name和Price文本用Label控件来替代,用合适的绑定语法将分配的值绑定到Text属性.在做完这些后,你的页的标记语言看起来应该和下面差不多:

<asp:DataList ID="DataList1" runat="server" DataKeyField="ProductID"
 DataSourceID="ObjectDataSource1" EnableViewState="False">
 <ItemTemplate>
  <h4>
   <asp:Label runat="server" ID="ProductNameLabel"
    Text='<%# Eval("ProductName") %>'></asp:Label>
  </h4>
  Available in the
   <asp:Label runat="server" ID="CategoryNameLabel"
    Text='<%# Eval("CategoryName") %>' />
  store for
   <asp:Label runat="server" ID="UnitPriceLabel"
    Text='<%# Eval("UnitPrice", "{0:C}") %>' />
 </ItemTemplate>
</asp:DataList>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
 OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetProducts" TypeName="ProductsBLL">
</asp:ObjectDataSource>

  注意在UnitPrice的Eval绑定语法里我包含了一个格式符,用来将值转换为货币格式- Eval("UnitPrice","{0:C}").在浏览器里浏览这个页,如图2所示,DataList以单列多行的table显示product信息.

图 2: 默认情况下DataList 显示一个单列多行的table

第二步: 修改DataList的布局方向

  默认情况下DataList垂直的用单列多行table来显示项(item).这个可以通过RepeatDirection属性来修改.将RepeatDirection属性从Vertical改为Horizontal后,DataList会以单行多列显示数据.可以在设计器里选择RepeatDirection属性窗口修改这个属性.修改完后设计器马上会调整DataList的布局,创建一个单行多列的界面(见图3).

图 3: RepeatDirection属性用来决定DataList的项的布局方向

  当显示小数据量时,一个单行多列的table是一个理想的选择.而大数据量时,单行需要很多列,屏幕会因为显示不了这么多项而出现水平滚动条.图4显示在单行的DataList里显示product信息的情况.因为product的数量太多(81),用户不得不向右滚动来查看每个product的信息.

图 4: 大数据量时单列的DataList会有水平滚动条,

第三步: 以多列多行的table来显示数据

  为了创建多行多列的DataList,我们需要设置RepeatColumns属性为显示的列数.默认的RepeatColumns属性为0,因此DataList会单列或单行的显示所有的项(取决于RepeatDirection属性的值).

  我们将在例子里每行显示3个product.因此设置RepeatColumns属性为3.做完这个后,在浏览器里浏览页面.如图5所示,product显示以3列多行列出.

图 5: 每行显示3条product

  RepeatDirection属性影响DataList的项的布局.图5显示的是RepeatDirection为Horizontal的情况.注意最前面的三个product — Chai, Chang, and Aniseed Syrup — 是先从左到右,再从上到下列出.后面的三个product(从Chef Anton's Cajun Seasoning开始)在开始三个下面的一行里.将RepeatDirection改为Vertical,这些product的布局变为先从上到下,再从左到右.见图6.

图 6: Products 垂直布局

  在最后的table里有多少行取决于记录的总数除以RepeatColumns的值.由于有84条product信息,除以3为28行.如果还有余数,最后的行或列会用空的cell填充.如果RepeatDirection为Vertical,那么最后的列会有空cell.如果RepeateDirection为Horizontal,那么最后的行有空cell.

总结

  DataList默认情况使用单列多行的table来显示项.和GridView只有一个TemplateField差不多.我们可以一行显示多条记录来.仅仅是设置RepeatColumns属性为每行的列数就可以达到这个目的.另外,RepeatDirection属性可以用来指定多行多列的table的内容是水平布局 —先从左到右,再从上到下 —或垂直的 —先从上到下,再从左到右.

作者简介

  Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用 微软Web技术。Scott是个独立的技术咨询顾问,培训师,作家,最近完成了将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电邮为mitchell@4guysfromrolla.com,也可以通过他的博客http://ScottOnWriting.NET与他联系。

(0)

相关推荐

  • 在ASP.NET 2.0中操作数据之三十三:基于DataList和Repeater使用DropDownList过滤的主/从报表

    导言 在前面的使用DropDownList过滤的主/从报表一章里我们使用GridView创建的主/从表,显示一些"主"记录.用户可以根据主记录来查看"从"(详细)的内容.主/从表在呈现一对多关系和含多列的表的信息时是一个好的选择.在前面我们已经学过如何使用GridView和DetailsView来实现.本章和后面两章我们将重新复习一下这些概念,但是主要学习使用DataList和Repeater来实现.本章我们将学习使用DropDownList包含主记录,而在Data

  • 在ASP.NET 2.0中操作数据之二十八:GridView里的Button

    导言 一般控件(比如GridView)显示数据的时候对数据只能读取,而需要处理数据的功能是非常常见的.典型的情况是为每行数据添加一个Button, LinkButton, 或ImageButton . 当点击这些button时,数据会PostBack,执行一些服务器端的代码. 一条条的编辑或删除数据是最常见的情况.实际上,编辑和删除是如此常见,从概述插入.更新和删除数据 开始, 我们可以看到GridView, DetailsView, 和 FormView可以零代码的完成这些功能. 除了编辑和删

  • 在ASP.NET 2.0中操作数据之三十二:数据控件的嵌套

    导言 除了静态HTML和数据绑定语法,template也可以包含Web控件和用户控件.这些控件的属性可以通过声明语法,数据绑定语法或在服务器端通过事件处理编程来设置. 通过将控件嵌入到template里,可以自定义界面,提升用户体验.例如,在在GridView控件中使用TemplateField 里,我们学习了如何通过在GridView的TemplateField里加一个Calendar控件来表示员工的雇佣日期.在给编辑和新增界面增加验证控件 和定制数据修改界面 里,我们学习了如何通过添加验证控

  • 在ASP.NET 2.0中操作数据之三十四:基于DataList和Repeater跨页面的主/从报表

    导言 在前面一章里我们学习了如何在一个页里显示主/从信息.另外一种经常使用的模式就是将主从信息用两个页分别显示.在前面的跨页面的主/从报表 我们通过GridView显示所有的supplier来使用这个模式.GridView里包含一个HyperLinkField,链接到另外一个页,并将SupplierID通过querystring传过去.第二个页使用GridView列出了选中的supplier提供的product. 这样的两页主/从表也可以用DataList和Repeater来实现.唯一的区别是D

  • ASP.NET 2.0中的数据操作之九:跨页面的主/从报表

    导言 在前面的两篇教程中,我们看到了如何在单一页面中显示主/从报表, 它使用DropDownList显示主记录,使用GridView或DetailsView显示详细信息. 另外一种常见的主/从报表模式是在一个页面中显示主记录而在另一个页面中显示详细信息.互联网上的论坛,如www.asp.net ,就是该模式在实际应用中非常典型例子. Asp.Net论坛由多个子论坛组成: Getting Started, Web Forms, Data Presentation Controls 等等. 每个子论

  • ASP.NET 跨页面传值方法

    1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.下面是一个例子: a.aspx的C#代码 复制代码 代码如下: private void Button1_Click(object sender, System.EventArgs e) { string s_url; s_url = "b.aspx?

  • 在ASP.NET 2.0中操作数据之二十六:排序自定义分页数据

    导言 和默认翻页方式相比,自定义分页能提高几个数量级的效率.当我们的需要对大量数据分页的时候就需要考虑自定义分页,然而实现自定义分页相比默认分页需要做更多工作.对于排序自定义分页数据也是这样,在本教程中我们就会扩展前面的例子来实现自定义分页数据的排序. 注意:既然本教程是基于前一个的,因此我们需要把前面教程示例页面EfficientPaging.aspx的<asp:Content>元素中的代码复制到本教程SortParameter.aspx示例页面中.关于如何进行这样的复制操作请参看为删除数据

  • 在ASP.NET 2.0中操作数据之二十九:用DataList和Repeater来显示数据

    导言 在之前的28篇教程的例子里,如果我们需要显示某个数据源的多条记录,我们使用GridView .GridView 的一行表示数据源的一条记录,列表示一个字段.虽然GridView 用来显示数据,分页,排序,编辑,删除非常的方便,但是有点臃肿.而且GridView 结构的标记是固定的-它包含一个带有<tr>和<td>的HTML <table>标记. 为了在显示多条记录时,有更好的自定义功能,ASP.NET 2.0提供了DataList 和Repeater (ASP.N

  • 在ASP.NET 2.0中操作数据之二十七:创建自定义排序用户界面

    简介 显示大量已经按类别(不是很多)排序的数据但没有类别分界线,用户很难找到所需要的类别.例如,数据库中只有9个类别(8个不同的类别和1个null),共81种产品.现在用一个GridView列出所有产品,假设有用户对类别Seafood的产品感兴趣,她一定会按类别排序,把Seafood产品排列在一起.排序后,用户便寻找Seafood产品开始和结束的地方.虽然是按英文字母排列类别不难找到Seafood,但仍要花些时间在GridView寻找.为了进一步的区分类别,许多网站使用类别分界线这种排序用户界面

  • 在ASP.NET 2.0中操作数据之三十:格式化DataList和Repeater的数据

    导言 在前面的教程里我们学习了DataList提供了一些风格样式的属性.而且我们还学习了如何定义HeadStyle, ItemStyle, AlternatingItemStyle, 和SelectedItemStyle等属性的默认CSS.除了这四个属性外,DataList还提供了其它属性,比如Font, ForeColor, BackColor, 和BorderWidth.而Repeater没有提供任何这样的属性.如果你需要用Reperter来实现这些效果,你就需要在templates里直接写

随机推荐