二十八GridView里的Button.docx
- 文档编号:9588310
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:29
- 大小:574.62KB
二十八GridView里的Button.docx
《二十八GridView里的Button.docx》由会员分享,可在线阅读,更多相关《二十八GridView里的Button.docx(29页珍藏版)》请在冰豆网上搜索。
二十八GridView里的Button
在ASP.NET2.0中操作数据之二十八:
GridView里的Button
作者:
heker2007字体:
[增加 减小]类型:
转载时间:
2016-05-09 我要评论
本文主要介绍ASP.NET2.0在GridView,DetailsView,FormView都可以包含Buttons,LinkButtons,或ImageButtons.这些button被点击时,并激发FormView和DetailsView的ItemCommand事件,GridView的RowCommand事件,根据CommandName的值来判断哪个button被点击了,执行相应的代码。
导言
一般控件(比如GridView)显示数据的时候对数据只能读取,而需要处理数据的功能是非常常见的.典型的情况是为每行数据添加一个Button,LinkButton,或ImageButton.当点击这些button时,数据会PostBack,执行一些服务器端的代码.一条条的编辑或删除数据是最常见的情况.实际上,编辑和删除是如此常见,从概述插入、更新和删除数据开始,我们可以看到GridView,DetailsView,和FormView可以零代码的完成这些功能.
除了编辑和删除button,GridView,DetailsView,andFormView也可以包含一些执行自定义服务器端代码的Buttons,LinkButtons,或ImageButtons.在这一章我们来看看如何向一个GridView或DetailsView里添加自定义的button.我们还将创建一个根据supplier进行分页的页面.对每个给定的supplier,FormView会显示它的相关信息,外加一个Button.点击这个Button时,所有相关products会被标记为停止使用.另外,GridView会列出选定的supplier提供的所有product,并且每一行会包含“IncreasePrice”和“DiscountPrice”两个Button.这两个Button用来提高或降低10%的product单价(见图一).
图1:
FormView和GridView都包含了执行自定义行为的Button
第一步:
添加一个Button教程页
在研究如何添加自定义button之前,我们先花一点时间在网站里创建一些页,这些页会在本指南里用到.先添加一个名为CustomButtons的文件夹,然后添加如下的两个页.添加页的时候确保每页都选择了Site.master作为母板页.
Default.aspx
CustomButtons.aspx
图2:
添加本指南需要的页面
象其它文件夹一样,CustomButtons文件夹里的Default.aspx用来列出教程章节.记得SectionLevelTutorialListing.ascx这个用户控件提供了这个功能.因此,从解决方案浏览里将这个用户控件拖到页面上.
图3:
添加SectionLevelTutorialListing.ascx用户控件到Default.aspx
最后,将这些页的地址加到Web.sitemap的条目里.在PagingandSorting
?
1
2
3
4
5
6
7
8
9
10
11
title="AddingCustomButtons" description="SamplesofReportsthatIncludeButtonsforPerforming Server-SideActions" url="~/CustomButtons/Default.aspx"> title="UsingButtonFieldsandButtonsinTemplates" description="ExamineshowtoaddcustomButtons,LinkButtons, orImageButtonsasButtonFieldsorwithintemplates." url="~/CustomButtons/CustomButtons.aspx"/> 修改完Web.sitemap后,在浏览器里看一下本教程站点,现在左边的菜单里包含了编辑,插入,删除教程的项. 图4: SiteMap包含了添加自定义button教程 第二步: 添加一个列出Supplier的FormView 我们首先来添加一个列出suppliers的FormView.正如在导言里讨论的那样,FormView根据supplier分页,并在GridView显示supplier提供的所有product.另外FormView会包含一个Button.当点击时,所有相关products会被标记为停止使用.在我们为FormView添加自定义button之前,我们首先创建显示supplier信息的FormView. 打开CustomButtons文件夹里的CustomButtons.aspx页,从工具箱里拖一个FormView进来,将FormView的ID设置为Suppliers.打开FormView的智能标签,创建一个名为SuppliersDataSource的ObjectDataSource. 图5: 创建一个名为SuppliersDataSource的ObjectDataSource 选择SuppliersBLL类的GetSuppliers()方法配置ObjectDataSource(见图6).由于这个FormView没有提供修改supplier信息的界面,所以在UPDATE标签的下拉列表里选择None. 图6: 使用SuppliersBLL类的GetSuppliers()方法配置数据源 数据源配置完成后,VisualStudio会生成一个InsertItemTemplate,一个EditItemTemplate和一个FormView的ItemTemplate.去掉InsertItemTemplate和EditItemTemplate,修改ItemTemplate,让它只显示supplier的公司名,电话号码.最后,在智能标签里选中EnablePagingcheckbox或者设置AllowPaging属性为True.完成这些后,你的声明标记看起来应该和以下差不多: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 FormViewID="Suppliers"runat="server"DataKeyNames="SupplierID" DataSourceID="SuppliersDataSource"EnableViewState="False"AllowPaging="True"> LabelID="CompanyName"runat="server" Text='<%#Bind("CompanyName")%>'/> Phone: LabelID="PhoneLabel"runat="server"Text='<%#Bind("Phone")%>'/> FormView> ObjectDataSourceID="SuppliersDataSource"runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetSuppliers"TypeName="SuppliersBLL"> ObjectDataSource> 图7: FormView列出当前选定的Supplier的CompanyNameandPhone 第三步: 添加一个GridView,用来列出某个Supplier的所有Product 在添加“DiscontinueAllProducts”Button前,先在FormView下面添加一个GridView.设置ID为SuppliersProducts,添加一个名为SuppliersProductsDataSource的ObjectDataSource. 图8: 创建一个名为SuppliersProductsDataSource的ObjectDataSource 选择ProductsBLL类的GetProductsBySupplierID(supplierID)方法配置ObjectDataSource(见图9).虽然GridView允许修改product的价格,但是并不使用的GridView自带的编辑或删除功能.因此在UPDATE,INSERT,andDELETE标签的下拉列表里都选择None. 图9: 使用ProductsBLL类的GetProductsBySupplierID(supplierID)方法配置数据源 由于GetProductsBySupplierID(supplierID)有一个输入参数,ObjectDataSource向导会提示我们配置这个参数.为了将SupplierID从FormView传过来,在参数来源的下来列表里选择Control,在ControlID下拉列表里选择Suppliers(在第二步里创建的FormView的ID). 图10: 指定supplierID参数的来源为SuppliersFormView 完成了ObjectDataSource向导后,GridView里的每一行product会包含一个BoundField和一个CheckBoxField.我们来精简一下,只显示DiscontinuedCheckBoxField,ProductName和UnitPrice.我们修改UnitPrice列的格式为货币.你的GridView和SuppliersProductsDataSource ObjectDataSource的声明标记看起来应该和下面差不多: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 GridViewID="SuppliersProducts"AutoGenerateColumns="False" DataKeyNames="ProductID"DataSourceID="SuppliersProductsDataSource" EnableViewState="False"runat="server"> BoundFieldDataField="ProductName"HeaderText="Product" SortExpression="ProductName"/> BoundFieldDataField="UnitPrice"HeaderText="Price" SortExpression="UnitPrice"DataFormatString="{0: C}" HtmlEncode="False"/> CheckBoxFieldDataField="Discontinued"HeaderText="Discontinued" SortExpression="Discontinued"/> GridView> ObjectDataSourceID="SuppliersProductsDataSource"runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProductsBySupplierID"TypeName="ProductsBLL"> ControlParameterControlID="Suppliers"Name="supplierID" PropertyName="SelectedValue"Type="Int32"/> ObjectDataSource> 现在我们的显示了一个主/从表,用户通过在上面的FormView里选择一个supplier,在下方的GridView里就可以看到这个supplier提供的products. 图11是在FormView里选择TokyoTraderssupplier的截图. 图11: 在GridView显示选定的Supplier的产品 第四步: 创建DAL和BLL层的停止使用Supplier的所有Products的方法 在FormView添加discontinuebutton前,我们首先需要在DAL和BLL里添加完成这个功能的方法.这个方法的名字为DiscontinueAllProductsForSupplier(supplierID).当点击FormView的Button时,我们会调用BusinessLogicLayer里的这个方法,并将选定的supplier的SupplierID传进去.BLL会继续调用DataAccessLayer的相关方法,这个方法会向数据库提交一个停止使用选定的supplier的products的UPDATE语句 象在以前的教程里所做的那样,我们使用自底向上的方法,首先创建DAL的方法,然后是BLL,最后在ASP.NETpage里实现这个功能.打开App_Code/DAL文件夹里的Northwind.xsd,为ProductsTableAdapter添加一个新方法(右键点击ProductsTableAdapter,选择AddQuery).这样弹出TableAdapterQuery的配置向导.首先指定DAL需要使用的SQL. 图12: 使用SQLStatement创建DAL方法 接着,向导会询问我们创建哪种类型的query.由于DiscontinueAllProductsForSupplier(supplierID)需要更新Products表,为指定的supplierID的所有products的Discontinued字段设置为1,因此我们需要创建一个更新数据的query. 图13: 选择UPDATEQuery的类型 下一个向导显示的窗口提供了TableAdapter的已经存在的UPDATE语句,它会updates在ProductsDataTable定义的所有的字段.用下面的语句替换它: UPDATE[Products]SET Discontinued=1 WHERESupplierID=@SupplierID 输入以上语句后点Next,最后一个向导窗口需要输入该方法的名字—DiscontinueAllProductsForSupplier.完成向导后点Finish button.当你回到DataSet设计器时你应该可以在ProductsTableAdapter看到名为DiscontinueAllProductsForSupplier(@SupplierID)的方法. 图14: 为DAL的方法取名为DiscontinueAllProductsForSupplier 完成DataAccessLayer里的DiscontinueAllProductsForSupplier(supplierID)方法后,我们下一步的任务是创建BusinessLogicLayer里的相应的方法.打开ProductsBLL类文件,添加以下内容: ? 1 2 3 4 publicintDiscontinueAllProductsForSupplier(intsupplierID) { returnAdapter.DiscontinueAllProductsForSupplier(supplierID); } 这个方法仅仅是调用DAL里的DiscontinueAllProductsForSupplier(supplierID)方法,并传递提供的supplierID 参数.如果有一些业务规则规定仅仅允许在一定的条件下supplier的products才能被停止使用,那么这些规则应该写在这里(BLL). 注意: 和ProductsBLL类的UpdateProduct重载不一样,DiscontinueAllProductsForSupplier(supplierID)的签名不包括DataObjectMethodAttribute属性( 第五步: 为FormView添加一个“DiscontinueAllProducts”Button 完成了BLL和DAL里的DiscontinueAllProductsForSupplier(supplierID)方法后,我们来做实现停止使用选定的supplier的所有product的功能最后一步: 为FormView的ItemTemplate添加Button.我们将这个Button添加在supplier的phonenumber下,Text为“DiscontinueAllProducts”,ID为DiscontinueAllProductsForSupplier.你可以通过FormView的智能标签里的EditTemplates来添加这个Button(见图15),或直接修改代码. 图15: 为FormView的ItemTemplate添加“DiscontinueAllProducts”Button 当用户点击这个Button时,页面会回发,FormView的ItemCommandevent被激发.我们可以为这个事件创建一个eventhandler,用来在Button被点击时执行自定义代码.注意,任何时候FormView里的任何Button,LinkButton,或ImageButton被点击时,ItemCommand事件都会被激发.这意味着当用户在FormView里从一个页面跳到另一个页面时,ItemCommand事件会被激发.当用户点击一个支持inserting,updating,或deleting的FormView里的New,Edit,或Delete时,ItemCommand事件会被激发. 既然无论点击什么button时,ItemCommand都会被激发,那么在eventhandler里我们需要判断是“DiscontinueAllProducts”Button被点击了还是其它的button.为了达到这个目的,我们可以通过设置Button的CommandName来识别.当Button被点击后,CommandName的值被传到ItemCommand的eventhandler,我们通过这个值来判断被点击的button是否是“DiscontinueAllProducts”Button.设置“DiscontinueAllProducts”Button的CommandName为“DiscontinueProducts”. 最后我们在客户端增加一个确认框来确保用户真的想停止使用选择的supplier的所有product.和我们在为删除数据添加客户端确认里看到的一样,这个可以用JavaScript来完成.设置Button的OnClientClick属性为“returnconfirm('Thiswillmark_all_ofthissupplier/'sproductsasdiscontinued.Areyoucertainyouwanttodothis? ');” ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 FormViewID="Suppliers"runat="server"DataKeyNames="SupplierID" DataSourceID="SuppliersDataSource"EnableViewState="False" AllowPaging="True"> LabelID="CompanyName"runat="server" Text='<%#Bind("CompanyName")%>'> Label> Phone: LabelID="PhoneLabel"runat="server"Text='<%#Bind("Phone")%>'/> ButtonID="DiscontinueAllProductsForSupplier"runat="server" CommandName="DiscontinueProducts"Text="DiscontinueAllProducts" OnClientClick="returnconfirm('Thiswillmark_all_ofthissupplier/'s productsasdiscontinued.Areyoucertainyouwanttodothis? ');"/> FormView> 下面,为FormView的ItemCommand事件创建eventhandler.在这个eventhandler里我们需要首先判断“DiscontinueAllProducts”Button是否被点击了.如果是,我们就需要创建一个Pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 十八 GridView Button