手机版

ASP.NET 2.0中的操作数据四十五:数据列表和中继器中的自定义按钮

时间:2021-10-30 来源:互联网 编辑:宝哥软件园 浏览:

介绍

在前面关于DataList和Repeater的7章中,我们分别创建了只读和可编辑删除的示例。为了使DataList具有编辑和删除功能,我们在itemtaperture中增加了一些按钮,点击时会引起回发,并根据按钮的CommandName属性触发相关事件。例如,添加一个命令名为“编辑”的按钮会在回发时触发编辑命令事件,如果命令名为“删除”,则会触发删除命令。

除了编辑和删除按钮之外,数据列表和中继器还可以包含按钮、链接按钮和图像按钮,它们在单击时执行自定义的服务器端逻辑。在本章中,我们将创建一个在Repeater中列出类别的界面。每个类别都包含一个按钮,当点击时,相关产品就会列出来。参见图1。

//files.jb51.net/file_images/article/201605/2016051414585637.png

图1:“显示产品”显示了目录中的所有产品。

步骤:添加教程页面。

首先添加本章要求的页面。添加一个名为CustomButtonsDataListRepeater的文件夹。然后添加以下两个页面,记得包括Site.master主板页面。

Default.aspx CustomButtons.aspx

//files.jb51.net/file_images/article/201605/2016051414585738.png

图2:添加页面。

与其他文件夹一样,CustomButtonsDataListRepeater文件夹下的Default.aspx页面列出了本节中的教程。像以前一样添加section level outorilling . ascx用户控件。

//files.jb51.net/file_images/article/201605/2016051414585739.png

图3:添加截面等级列表。ascx用户控件。

最后,在网站地图中添加这些页面的信息。请参见下面的标记:

siteMapNode URL=' ~/CustomButtonsDataListRepeater/default . aspx ' title='将自定义按钮添加到数据列表和转发器' description='包含用于执行服务器端操作的按钮的数据列表和转发器报告示例' siteMapNode URL=' ~/CustomButtonsDataListRepeater/Custom Buttons . aspx ' title='在数据列表和转发器的模板中使用自定义按钮' description='检查如何在模板中添加自定义按钮、链接按钮或图像按钮'//sitemapnode完成后浏览页面。参见图4。

//files.jb51.net/file_images/article/201605/2016051414585740.png

图4:当前站点地图包含本章的页面。

步骤:添加类别列表。

我们需要添加一个列出所有类别的中继器,每个类别都有一个“显示产品”链接按钮。单击链接按钮将显示与类别相关的所有产品。首先,我们创建一个列出所有类别的Repeater。打开“自定义按钮. aspx”页面,在中拖动一个中继器,并将标识设置为“类别”。然后从智能标记中创建一个名为CategoriesDataSource的ObjectDataSource,并使用CategoriesBLL类的GetCategories()方法对其进行配置。

//files.jb51.net/file_images/article/201605/2016051414585741.png

图5:配置对象数据源。

Visual Studio会根据数据源为DataList创建一个默认的ItemTemplate,而Repeater的模板需要手动定义。而且Repeater的模板需要通过声明代码直接创建和修改(也就是说,智能标签上没有“编辑模板”选项)。

单击左下角的源视图,并添加一个在h3和段落描述中显示类别名称的项目模板。并包含一个显示每个类别之间的水平线(hr/)的SeparatorTemplate。另外添加一个链接按钮,并将文本设置为“显示产品”。此后,您的页面声明代码应该类似于以下内容:

asp3360中继器ID=' Categories数据源ID=' Categories数据源' runat=' server '项目模板H3 % # Eval(' CategoryName ')%/H3 p % # Eval(' Description ')%[asp3360链接按钮runat=' server ' ID=' Show Products ' Show Products/asp3360链接按钮]/p/项目模板分离mplatehr//分离mplate/asp3360 repeaterasp3360对象数据源ID=' Categories '图6是浏览该页的样子。每个类别名称和描述都被列出来。当点"显示产品"按钮时会引起回发,但是还不执行任何功能。

//files.jb51.net/file_images/article/201605/2016051414590142.png

图6: 每个"类别"的名字和描述和"展示产品"链接按钮一起列出

第三步:当点"展示产品"链接按钮时执行服务器端代码

任何时候,当数据列表或中继器的模板里的按钮、链接按钮、图像按钮被点时,会产生回发,并激发数据列表或中继器的那么事件事件。除了那么事件外,如果"按钮"的按钮设为("删除"、"编辑"、"取消"、"更新"、"选择")其中一个时,数据列表会激发另外一个事件。但是那么事件是都会激发的。

当数据列表或中继器的模板里的纽扣被点时,通常我们需要获取哪个按钮被点了(一个控件里可能有多个按钮,比如编辑和删除),还可能需要一些其它的信息(比如那些按钮被点的项目(项)的主键)。按钮、链接按钮、图像按钮提供了两个属性,它们的值可以传给那么事件事件处理程序:

命令名表示模板里每个按钮身份的字符串CommandArgument通常用来保存一些值,比如主键。

在这个例子里,将链接按钮的按钮设为“ShowProducts”,并将当前记录的主键类别编号通过绑定语法绑定到CommandArgument(CategoryArgument=' % # Eval(' CategoryID ')% ')。完成这些后,链接按钮的声明语法看起来应该和下面差不多:

asp3360链接按钮runat=' server '命令名称=' Show Products ' CommandArgument=' % # Eval(' CategoryID ')% ' ID=' Show Products '显示产品/asp3360链接按钮当按钮被点时,产生回发并激发数据列表或中继器的那么事件事件按钮的按钮和命令参数值被传到事件处理程序里。

为那么事件事件创建一个事件处理程序,注意事件处理程序的第二个参数(名字为e)。这个参数的类型为RepeaterCommandEventArgs,它有以下四个属性:

CommandArgument被点的"按钮"的命令参数属性的值"命令名称按钮"的按钮属性的值CommandSource被点按钮的引用项目包含被点按钮的重复项目的引用;每条绑定到中继器的记录被表明为一个重复项目

由于选择的种类的分类编号通过命令参数传入,我们可以在那么事件事件处理程序里获取与之相关的产品。这些制品在ItemTemplate(我们已经添加过了)里绑定到一个BulletedList。剩下的事就是添加BulletedList,在那么事件事件处理程序里引用它,然后将选择的种类的制品绑定到BulletedList,我们将在第四步完成这个。

注意:数据列表的那么事件事件处理程序传入了一个数据列表命令参数类型的对象,它提供和RepeaterCommandEventArgs一样的四个属性。

第四步: 显示选择的种类的制品

在模板列里显示制品可以使用很多控件,我们可以添加一个嵌套的中继器、数据列表、DropDownList、GridView等。在这里我们使用BulletedList。回到CustomButtons.aspx页面页的声明代码,在"展示产品"链接按钮后添加一个BulletedList。将身份设为产品集成。项目符号显示那些通过文本字段属性指定的字段值。由于将有产品信息绑定到这个属性,我们将文本字段设为产品名称。

ASP : bulletedlist id=' productinchategory ' datatextfield=' product name ' runat=' server '/ASP : bulletedlist通过e . item . find control(' productinchategory ')引用ItemCommand事件处理程序中的此控件,并绑定到产品。

受保护的void Categories_ItemCommand(对象源,repeatercommandventargs e){ if(e.command name==' show products '){//确定CategoryID int CategoryID=Convert。ToInt32(例如CommandArgument);//从ProudctsBLL中获取关联的产品,并将它们绑定到BulletedList BulletedList products=(BulletedList)e . item . find control(' products in integrary ');product bll product API=new product bll();产品。DataSource=productsAPI。getproductbycategoryid(categoryID);产品。DataBind());}}在ItemCommand事件处理程序中执行任何操作之前,需要先检查传入的CommandName。由于在点击任何一个按钮时都会执行ItemCommand事件处理程序,所以如果模板中有多个按钮,就需要通过CommandName的值来识别需要采取什么操作。因为我们这里只有一个按钮,所以在这里检查CommandName是没有意义的,但是这是一个好习惯。然后,通过命令获取所选类别的类别号。然后参考Template中的BulletedList,通过ProductsBLL类的categoryid (categoryid)方法绑定getproducts的结果。

在前面的在DataList中使用按钮的教程中,比如在DataList中编辑和删除数据汇总,我们是通过DataKeys集合获取给定项的主键的。这个方法在数据列表中运行良好,但是Repeater没有数据键属性。因此,我们需要以另一种方式提供主键的值,例如使用按钮的CommandArgument,或者在模板中使用隐藏的Label,然后通过e.Item.FindControl('LabelID ')在ItemCommand事件处理程序中读取它的值。

完成ItemCommand事件处理程序后浏览页面。参见图7。单击“显示产品”链接将导致回发并显示相关产品。此外,请注意,单击其他“显示产品”链接时,将保留以前的产品信息。

注意:如果需要修改此报告的行为,例如一次只列出一类产品,则只需将BulletedList的EnableViewState属性设置为False。

//files.jb51.net/file_images/article/201605/2016051414590143.png

图7:显示了与所选类别相关的产品。

摘要

数据列表和中继器可以在模板中包含许多按钮、链接按钮和图像按钮。当单击这些按钮时,它们将导致回发并触发ItemCommand事件。为ItemCommand事件创建事件处理程序。可以将服务器端代码与单击按钮相关联。在此事件处理程序中,首先检查传入的CommandName值,以确定单击了哪个按钮。可以通过CommandArgument属性提供其他信息。

编程快乐!

作者简介

Scott Mitchell,本系列教程的作者,也是关于ASP/ASP的六本书的作者。NET,是4GuysFromRolla.com的创始人,自1998年以来一直使用微软的网络技术。你可以点击查看所有教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望能帮助你学习ASP.NET。

版权声明:ASP.NET 2.0中的操作数据四十五:数据列表和中继器中的自定义按钮是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。