![08-使用两个DropDownList过滤的主从报表_第1页](http://file4.renrendoc.com/view/fd1a97d71577a8a38253b7e338f70053/fd1a97d71577a8a38253b7e338f700531.gif)
![08-使用两个DropDownList过滤的主从报表_第2页](http://file4.renrendoc.com/view/fd1a97d71577a8a38253b7e338f70053/fd1a97d71577a8a38253b7e338f700532.gif)
![08-使用两个DropDownList过滤的主从报表_第3页](http://file4.renrendoc.com/view/fd1a97d71577a8a38253b7e338f70053/fd1a97d71577a8a38253b7e338f700533.gif)
![08-使用两个DropDownList过滤的主从报表_第4页](http://file4.renrendoc.com/view/fd1a97d71577a8a38253b7e338f70053/fd1a97d71577a8a38253b7e338f700534.gif)
![08-使用两个DropDownList过滤的主从报表_第5页](http://file4.renrendoc.com/view/fd1a97d71577a8a38253b7e338f70053/fd1a97d71577a8a38253b7e338f700535.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、导言在前面的指南中我们研究了如何显示一个简单的主/从报表,该报表使用DropDownList和GridView控件,DropDownList填充类别,GridView显示选定类别的产品.这类报表用于显示具有一对多关系的记录时非常合适,同时它也可以很容易的被扩展以显示多个一对多关系的数据.比如,一个订单系统应该包含表示客户,订单和订单明细的表.一个客户也许有多个订单,每个订单又包含多条订单项.这样的数据可以使用两个DropDownList和一个GridView呈现给用户.第一个DropDownList应该包含数据库中所有客户的列表,第二个DropDownList的内容是选定客户的订单.GridV
2、iew用于列出所选定订单的订单明细项.Step1:创建DropDownList并使用类别数据填充我们的第一个目标是添加一个能够列出类别的DropDownList.这些步骤在前面的指南中已经做详细的分析,但为了保持本篇指南的完整性有必要在这里简单概括一下.打开Filtering文件夹中的MasterDetailsDetails.aspx,在页面上添加一个DropDownList,设置它的ID为Categories,然后单击智能标记上的ConfigureDataSource链接.在数据源配置向导中选择新增一个数据源.图1:为DropDownList增加一个新的数据源1当然,新的数据源应该是Obje
3、ctDataSource.把新的ObjectDataSource命名为CategoriesDataSource并且让他调用CategoriesBLL对象的GetCategories()方法图2:选择使用CategoriesBLL类图3:配置ObjectDataSource使用GetCategories()方法2配置完ObjectDataSource后还需要指定要在DropDownList中显示的数据字段,以及作为数据项的值(valueforthelistitem)的数据字段.我们指定CategoryName为要显示的列,指定CategoryID为数据项的值字段图4:指定DropDownList
4、显示CategoryName列并且使用CategoryID列作为数据项的值这时,我们就有了一个使用Categories表中的记录来填充的DropDownList控件.当用户在DropDownList中选择一个新的类别时,我们需要一次回发,这样可以刷新在第二步中我们要创建的产品DropDownList控件.所以,categoriesDropDownList的智能标记上选中AutoPostBack选项.3图5:选中CategoriesDropDownList的AutoPostBackStep2:在第二个DropDownList中显示选中类别的产品CategoriesDropDownList完成后,
5、下一步就需要一个显示属于选定类别的产品的DropDownList了.要完成这个功能,再增加一个DropDownList控件并命名为ProductsByCategory.与CategoriesDropDownList一样,为ProductsByCategoryDropDownList创建一个新的ObjectDataSource并命名为ProductsByCategoryDataSource.4图6:为ProductsByCategoryDropDownList添加新数据源图7:创建一个新的ObjectDataSource并命名为ProductsByCategoryDataSource由于Prod
6、uctsByCategoryDropDownList需要显示属于选定类别的产品,让)ObjectDataSource调用ProductsBLL对象的GetProductsByCategoryID(categoryID方法.5图8:选择使用ProductsBLL类图9:配置ObjectDataSource使用GetProductsByCategoryID(categoryID)方法在向导的最后一步需要指定categoryID的值.我们把CategoriesDropDownList的已选择的数据项项作为该参数值.6图10:使用categoryID参数从CategoriesDropDownList接
7、收值ObjectDataSource配置完成后,剩下的就是指定DropDownList要显示的字段和作为值的字段了.设置为显示ProductName并把ProductID做为值字段图11:指定DropDownList数据项的文本和值使用的数据源字段7ObjectDataSource和ProductsByCategoryDropDownList配置完成后页面上会有两个DropDownList:第一个列出所有的类别,第二个列出属于选定类别的产品.当用户在第一个DropDownList上选择了一个新的类别后,将会发生一次回发(postback),第二个DropDownList将会重新绑定以显示属于新
8、选定类别的产品.图12和图13显示了在浏览器中看到的MasterDetailsDetails.aspx页面.图12:第一次访问页面时Beverages类别是选中的.8图13:选择一个不同的类别时显示该类别的产品9图14:激活productsByCategoryDropDownList的AutoPostBack属性Step3:使用DetailsView显示选中产品的详细信息最后一个步骤是在DetailsView中显示选中产品的详细信息.要完成该功能,添加一个DetailsView到页面上,设置它的ID属性为ProductDetails,给它创建一个新的ObjectDataSource.配置Obj
9、ectDataSource使它通过ProductsBLL类的GetProductByProductID(productID)方法填充数据,使用ProductsByCategoryDropDownList的已选择项的值作为productID参数的值.10图15:选择使用ProductsBLL类图16:配置ObjectDataSource使用GetProductByProductID(productID)方法11图17:使用ProductsByCategoryDropDownList的值作为productID参数的值你可以选择在DetailsView显示的任何有效的字段.我决定不显示Product
10、ID,SupplierID,和CategoryID字段并且对其余的字段重新排序及格式化.另外,我去掉了DetailsView的Height和Width属性设置,允许DetailsView可以扩展到需要的宽度,这样比把它限制在指定的大小会更好的显示数据.下面便是全部的标记性语言(markup)12花点时间在浏览器中测试一下MasterDetailsDetails.aspx页面.乍一看好像一切如预计的那样顺利,但是却有一个小问题.当你选择了一个新类别,ProductsByCategoryDropDownList会更新显示选中类别的产品,但是ProductDetailsDetailsView还是显示
11、上一个产品的信息.当选择了一个选中类别的不同的产品时DetailsView应该被更新.此外,如果你的测试足够彻底,你将会发现如果你不断的选择新类别(比如在CategoriesDropDownList中选择Beverages,然后选择Condiments,然后是Confections)每个类别的选择都会使ProductDetailsDetailsView被刷新.为了让这个问题更具体一些,让我们看一个例子.当你第一次访问该页面时,Beverages类别是选中的并且与之相关的产品在ProductsByCategoryDropDownList中列出.Chai是当前选中的产品,他的详细信息显示在Prod
12、uctDetailsDetailsView中,如图18.13图18:DetailsView显示了选中产品的详细信息如果你把类别选项Beverages改成Condiments,便会发生一次回发,ProductsByCategoryDropDownList会相应的更新,但是DetailsView仍然会显示Chai的详细信息.14图19:上一次选择产品的详细信息仍然在显示在列表中选择一个产品会如预期地一样刷新DetailsView,如果你改变了产品之后选择了一个新的类别,DetailsView又一次没有刷新.然后如果你选择一个新类别而不是选择一个产品,DetailsView则会刷新.究竟是怎么回事呢
13、?这个问题是由页面生命周期的时间调度引发的.当页面被请求时会经过一系列的处理后呈现出来.这其中的一项处理便是ObjectDataSource控件检查他的SelectParameters值是否发生变化.如果发生了变化,WEB控件绑定到ObjectDataSource的数据便会刷新显示.比如,当一个新类别被选中时,ProductsByCategoryDataSourceObjectDataSource发现它的参数值已经发生了变化,然后ProductsByCategoryDropDownList就会重新绑定,获取所选中类别的产品.在这种情况下发生的该问题是由于在页面的生命周期中ObjectDataS
14、ources检查参数是否发生改变的动作是在关联的WEB控件重新绑定之前.因此,当选择了一个新的类别ProductsByCategoryDataSourceObjectDataSource会检查到它的参数值发生了变化.但是,ProductDetailsDetailsView使用的ObjectDataSource并没有发生任何变化,因为ProductsByCategoryDropDownList还没有重新绑定.在稍后的生命周期中ProductsByCategoryDropDownList重新绑定到它的ObjectDataSource,获取刚刚选中类别的产品.当ProductsByCategoryD
15、ropDownList的值发生变化的时候ProductDetailsDetailsView的ObjectDataSource已经完成了它的参数值检查工作.因此,DetailsView还是显示先前的数据.图20描述了这个交互的过程.图20:TProductDetailsDetailsView的ObjectDataSource的检查工作结束后ProductsByCategoryDropDownList的值才改变.15要解决这个问题,我们需要在ProductsByCategoryDropDownList绑定后显式的重新绑定ProductDetailsDetailsView.我们可以在Products
16、ByCategoryDropDownList的DataBound事件中调用ProductDetailsDetailsView的DataBind()方法.把下面的事件处理代码添加到MasterDetailsDetails.aspx页面的代码后置类:protectedvoidProductsByCategory_DataBound(objectsender,EventArgse)ProductDetails.DataBind();添加对ProductDetailsDetailsView的DataBind()方法的显式调用后,就一切正常了.图21高亮显示了该方法是如何解决这个问题的.图21:在ProductsByCategoryDropDownList的DataBound事件中ProductDetailsDetailsView被显示的刷新.DropDownList控件是一个非常理想的用于主/从报
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 申请撤销处分申请书
- 2025年度人工智能教育培训合作框架协议书模板
- 城市居民低保申请书
- 2025年度新能源发电项目租赁合同
- 入学生会组织部申请书
- 办砖厂申请书
- 二零二五年度泰康保险业健康保障计划协议存款合同
- 现代珠宝店营销中社交媒体的不可或缺性
- 个人劳动仲裁申请书范本
- 收费员调站申请书范文
- 2023年菏泽医学专科学校单招综合素质模拟试题及答案解析
- 常见食物的嘌呤含量表汇总
- 人教版数学八年级下册同步练习(含答案)
- SB/T 10752-2012马铃薯雪花全粉
- 2023年湖南高速铁路职业技术学院高职单招(英语)试题库含答案解析
- 湿型砂中煤粉作用及检测全解析
- 积累运用表示动作的词语课件
- 机动车登记证书英文证书模板
- 第8课《山山水水》教学设计(新人教版小学美术六年级上册)
- T∕ZSQX 008-2020 建设工程全过程质量行为导则
- 质量管理体系基础知识培训-2016
评论
0/150
提交评论