已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在ASP.NET 2.0中操作数据之四十五:DataList和Repeater里的自定义Button作者:heker2007 字体:增加减小 类型:转载 时间:2016-05-14我要评论本文主要介绍在DataList和Repeater添加诸如Button,LinkButton和ImageButton等控件的方法,并根据相关控件CommandName属性触发相应的事件,执行相应的操作。导言在前面关于DataList 和Repeater 的7章教程里,我们分别创建了只读和可以编辑删除的例子。为了让DataList有编辑和删除的功能,我们在ItemTemplate里添加了一些button,当点击时,引起postback,并根据button的CommandName属性激发相关的事件。例如,添加一个CommandName为“Edit”的button,在postback时会激发EditCommand事件,如果CommandName为“Delete”则激发DeleteCommand。除了编辑和删除button,DataList和Repeater还可以包含一些当点击时,执行自定义服务器端逻辑的Button,LinkButton和ImageButton。本章我们将创建一个在Repeater里列出categories的界面。每个category都包含一个button,当点击时会列出相关product。见图1。图 1: 点 “Show Products” 显示目录下所有product第一步: 添加教程页首先添加本章需要的页。添加一个名为CustomButtonsDataListRepeater的文件夹。然后添加下面两个页,记得包含Site.master母板页。 Default.aspx CustomButtons.aspx图 2: 添加页和其它文件夹一样,CustomButtonsDataListRepeater文件夹下的Default.aspx页会列出本部分的教程。和前面一样添加SectionLevelTutorialListing.ascx用户控件。图 3: 添加 SectionLevelTutorialListing.ascx用户控件最后,在Web.sitemap里添加这些页的信息。见下面的标记:?1234567891011完成后浏览该页。见图4。图 4: 现在的站点地图包含了本章的页第二步: 添加 Categories列表我们需要添加一个列出所有categories,每个category都有一个“Show Products” LinkButton的Repeater。点LinkButton时会显示所有category相关的products。我们首先创建一个列出所有categories的Repeater。打开CustomButtons.aspx页,拖一个Repeater进来,将ID设为Categories。然后从智能标签里创建一个名为CategoriesDataSource的ObjectDataSource,用CategoriesBLL类的GetCategories()方法配置它。图5: 配置ObjectDataSourceVisual Studio会根据数据源为DataList创建一个默认的ItemTemplate,而Repeater的templates需要手工定义。而且Repeater的templates需要直接通过声明代码来创建和修改(也就是说在智能标签上没有“Edit Templates”选项)点左下角的源视图,添加一个以显示category name,以段落description的ItemTemplate。并包含一个在每个category之间显示水平线()的SeparatorTemplate。同样还要添加一个LinkButton,将Text设为“Show Products”。完成这些后你的页面声明代码应该和下面差不多:?12345678910111213141516Show Products图6是浏览该页的样子。每个category name和description都被列出来。当点“Show Products” button时会引起postback,但是还不执行任何功能。图 6: 每个 Category的Name 和 Description 和 “Show Products” LinkButton一起列出第三步:当点“Show Products” LinkButton 时执行服务器端代码任何时候,当DataList或Repeater的template里的Button, LinkButton, ImageButton被点时,会产生postback,并激发DataList或Repeater的ItemCommand事件。除了ItemCommand外,如果button的CommandName 设为(“Delete”, “Edit”, “Cancel”, “Update”, “Select”)其中一个时,DataList会激发另外一个事件。但是ItemCommand是都会激发的。当DataList或Repeater的template里的Button被点时,通常我们需要获取哪个button被点了(一个控件里可能有多个button,比如编辑和删除),还可能需要一些其它的信息(比如那些button被点的item(项)的主键)。Button, LinkButton, ImageButton提供了两个属性,它们的值可以传给ItemCommand event handler: CommandName 表示template里每个button身份的字符串 。 CommandArgument 通常用来保存一些值,比如主键。在这个例子里,将LinkButton的CommandName设为“ShowProducts”,并将当前记录的主键 CategoryID 通过绑定语法绑定到CommandArgument(CategoryArgument=)。完成这些后,LinkButton的声明语法看起来应该和下面差不多:?123asp:LinkButton runat=server CommandName=ShowProductsCommandArgument= ID=ShowProductsShow Products当button被点时,产生postback并激发DataList或Repeater的ItemCommand事件。Button的CommandName和CommandArgument值被传到event handler里。为ItemCommand事件创建一个event handler,注意event handler的第二个参数(名字为e)。这个参数的类型为RepeaterCommandEventArgs,它有以下4个属性: CommandArgument 被点的 button的CommandArgument property 的值 CommandName button的CommandName property 的值 CommandSource 被点 button 的引用 Item 包含被点button 的 RepeaterItem的引用; 每条绑定到Repeater的记录被表明为一个 RepeaterItem由于选择的category的CategoryID通过CommandArgument传入,我们可以在ItemCommand event handler里获取与之相关的products。这些products在ItemTemplate(我们已经添加过了)里绑定到一个BulletedList。剩下的事就是添加BulletedList,在ItemCommand event handler里引用它,然后将选择的category的products绑定到BulletedList,我们将在第四步完成这个。注意:DataList的ItemCommand event handler传入了一个DataListCommandEventArgs类型的对象,它提供和RepeaterCommandEventArgs 一样的4个属性。第四步: 显示选择的Category的 Products在ItemTemplate里显示products可以使用很多控件,我们可以添加一个嵌套的Repeater,DataList,DropDownList,GridView等。在这里我们使用BulletedList。回到CustomButtons.aspx page页的声明代码,在“Show Products” LinkButton后添加一个BulletedList。将ID设为ProductsInCategory。BulletedList显示那些通过DataTextField属性指定的字段值。由于将有product信息绑定到这个属性,我们将DataTextField设为ProductName。?12在ItemCommand event handler里通过e.Item.FindControl(ProductsInCategory)引用这个控件,并与products绑定。?12345678910111213141516protected void Categories_ItemCommand(object source, RepeaterCommandEventArgs e)if (e.CommandName = ShowProducts)/ Determine the CategoryIDint categoryID = Convert.ToInt32(e.CommandArgument);/ Get the associated products from the ProudctsBLL and bind/ them to the BulletedListBulletedList products =(BulletedList)e.Item.FindControl(ProductsInCategory);ProductsBLL productsAPI = new ProductsBLL();products.DataSource =productsAPI.GetProductsByCategoryID(categoryID);products.DataBind();在ItemCommand event handler里执行任何操作前,需要先检查传入的CommandName。由于ItemCommand event handler在任何button被点时都会执行,如果在template里有多个button时需要通过CommandName的值来辨别需要采取什么操作。由于我们这里只有一个button,因此在这里检查CommandName是没意义的,但是这是一个好习惯。然后,选择的category的CategoryID通过CommandArgument获取。然后引用Template里的BulletedList并绑定ProductsBLL类的GetProductsByCategoryID(categoryID)方法的结果。在前面DataList里使用button的教程里,比如在DataList里编辑和删除数据概述,我们通过DataKeys集合来获取给定item的主键。这个方法在DataList里很好用,但是Repeater没有DataKeys属性。因此我们需要换一种方法来提供主键的值,比如通过button的 CommandArgument,或者在template使用一个隐藏的Label,然后通过e.Item.FindControl(LabelID)在ItemCommand event handler里读出它的值。完成ItemCommand event handler后,浏览该页。见图7。点“Show Products” link会引起postback,并显示相关的products。而且,注意当点其它“Show Products” links时前面的product信息会保留。注意:如果你需要修改这个报表的行为,比如一次只列出一个category的products,仅仅只需要将BulletedList的EnableViewState属性设为False。图 7: 用 BulletedList 显示选择Categ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 压电触摸传感器总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 中国食品级铝箔袋市场现状研究分析与发展前景预测报告
- 农业区位因素(梅宏柱老师)
- 2025年农场防台防风作物保护合同协议
- 2025年农产品直播带货合同协议(销售)
- 环保之路我为先行
- 房产销售成就解析
- 2025年特种作业人员电工证考试试题库及答案
- 酒店消防逃生演练方案酒店消防演练流程
- 2025年护士传染病护理知识专项训练试卷及答案
- 办公楼物业安全管理制度
- 卫生间改造专项施工方案
- 物业检修服务方案制定
- 中科院心理咨询师培训考试题库及答案-10心理咨询专业伦理(新版)
- 2025年基础公文常识题库及答案
- 翡翠交易活动方案
- 2025年辅警考试试题及答案真题
- 测绘单位安全生产管理办法
- 2025-2026学年福建省龙岩市初二英语上册期中考试试卷及答案
- 2025及未来5年中国羊绒条市场调查、数据监测研究报告
- 市政道路雨污水管排水工程施工方案
评论
0/150
提交评论