快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
lectedValue属性.

注意:这是我们在Repeater里 使用LinkButton的其中一个挑战.如果我们使用hperlink,可以通过querystring来 传递CategoryID.

在我们解决这个问题前,首先将ObjectDataSource绑定到 DataList,然后指定ItemTemplate.

从DataList的智能标签添加一个名为 CategoryProductsDataSource的ObjectDataSource,并使用ProductsBLL类的 GetProductsByCategoryID(cateogryID)配置它.由于此DataList只提供只读功能, 因此在INSERT,UPDATE,DELETE标签里选择None.

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

图 12:配置 ObjectDataSource

由于GetProductsByCategoryID (categoryID)方法需要一个输入参数,向导会要求我们指定参数源.我们使用 GridView或DataList列出categories时,可以将参数源设为Control,ControlID设 为数据控件的ID.然而由于Repeater没有SelectedValue属性,所以不能用作参数源 .你可以查看ControlID下拉列表,它里面只包含一个控件 ID—CategoryProducts(DataList).

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

图 13: 配置参数

配置完数据源后,Visual Studio为DataList自 动产生ItemTemplate.用我们前面使用的template替换默认的ItemTemplate.将 DataList的RepeatColumns属性设为2.完成这些后,你的代码应该和下面的差不 多:

ASP.NET

<asp:DataList ID="CategoryProducts" runat="server" DataKeyField="ProductID"
DataSourceID="CategoryProductsDataSource" RepeatColumns="2"
EnableViewState="False">
<ItemTemplate>
<h5><%# Eval("ProductName") %></h5>
<p>
Supplied by <%# Eval("SupplierName") % ><br />
<%# Eval("UnitPrice", "{0:C} ") %>
</p>
</ItemTemplate>
</asp:DataList>
<asp:ObjectDataSource ID="CategoryProductsDataSource"
OldValuesParameterFormatString="original_{0}"  runat="server"
SelectMethod="GetProductsByCategoryID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter Name="categoryID" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>

目前为止 CategoryProductsDataSource ObjectDataSource的categoryID参数还没有设置. 所以浏览页面时没有任何的product显示出来.我们现在需要将它设置为Repeater 中的被点击的category的CategoryID.这里有两个问题,第一是我们如何判断什么 时候Repeater的ItemTemplate被点了.二是哪个被点了.

和 Button,ImageButton一样,LinkButton有一个Click event和一个Command event.Click事件仅仅用来说明LinkButton被点击了.有时候我们需要传递更多的 信息到event handler里.这样的话,就需要使用LinkButton的CommandName 和 CommandArgument .当LinkButton被点时,Command事件激发,event handler会接受 CommandName和CommandArgument的值.

当Repeater里的template里激发了 一个Command事件时,Rpeater的ItemCommand事件被激发.并将被点击的 LinkButton(或者Button和ImageButton)的CommandName和CommandArgument的值传 进来.因此,判断category LinkButton什么时候被点击了,我们需要:

设置 Rpeater里的ItemTemplate的LinkButton的CommandName属性(我使用的 "ListProducts").设置了值后LinkButton被点后Command事件会激发.

设置LinkButton的CommandArgument属性为当前item的CategoryID.

为Repeater的ItemCommand事件创建一个event handler.在它里面将传入 的CommandArgument值赋给CategoryProductsData

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号