快速业务通道

ASP.NET 2.0数据教程之三十五:使用Repeater和DataList实现的主/从报表

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
需要知道的信息。我们可以为Repeater创建一个ItemDataBound event handler,在每个category绑定到Repeater时调用这个方法然后将总数输出。

在DataSet里更新CategoriesDataTable 添加一个NumberOfProducts列. 我们可以更新CategoriesDataTable的GetCategories()方法来包含这个信息或者 保留这个方法,再创建一个新的名为GetCategoriesAndNumberOfProducts()方法 。

我们来看看这两种方法。第一种写起来更简单,因为我们不需要更新 DAL。但是它需要和数据库更多的连接。在ItemDataBound event handler里调用 GetProductsByCategoryID(categoryID)方法又增加了一次数据库连接(这在每个 category绑定时会发生一次)。这时一共会有N+1次对数据库的请求(N为 Repeater里显示的category的总数)。而第二种方法product总数从 GetCategories()(或GetCategoriesAndNumberOfProducts())方法返回,这样只请 求一次数据库就可以了。

在ItemDataBound Event Handler里获取 Products总数

在ItemDataBound event handler里获取product总数不需要修改 DAL。只需要直接修改CategoriesAndProducts.aspx页。通过Repeater的智能标签 添加一个新的名为CategoriesDataSource的ObjectDataSource。使用 CategoriesBLL类的GetCategories()方法配置它。

ASP.NET 2.0数据教程之三十五:使用Repeater和DataList实现的主/从报表

图 3:配置 ObjectDataSource

Repeater里的每个Category都是 可点的,而且在点了之后,CategoryProducts DataList会显示那些相关的 product。我们可以将每个category设为hyperlink,链到本页 (CategoriesAndProducts.aspx),通过querystring为CategoryID赋值。这种方法 的好处是,特定category的product可以通为搜索建立索引和书签。

我们 也可以将每个category设为LinkButton,在本章我们使用这个方法。LinkButton 看起来象一个hyperlink,但是点击后会产生一个postback。DataList的 ObjectDataSource会刷新以显示选中category相关联的product。在本章使用 hyperlink更合理。然而在别的情况下可以使用LinkButton会好一点。虽然是这样 ,我们在这里也使用LinkButton。我们将会看到,使用LinkButton会有一些使用 hyperlink时碰不到的挑战。因此我们可以学习更好学习它,以便以后使用。

注意:如果你使用HyperLink或<a>来代替LinkButton来重复练习一 次本章的内容,是最好不过了。

下面的标记语言是Repeater和 ObjectDataSource的,注意Repeater的template将每个item表示为LinkButton。

ASP.NET

<asp:Repeater ID="Categories" runat="server" DataSourceID="CategoriesDataSource">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><asp:LinkButton runat="server" ID="ViewCategory"></asp:LinkButton></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>

注意:在本章Repeater的view state必须开启(Repeater的声明语法里的EnableViewState="False" )。在第三步我们将为ItemCommand事件创建一个event handler,在它里面我们 要更新DataList的ObjectDataSource的SeleceParameters集合。如果view state 被禁用的话Repeater的ItemCommand不会被激发。想了解具体的原因和更多的信息 请参考 A Stumper of an ASP.NET Question 和

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号