07使用DropDownList过滤的主从报表.docx
- 文档编号:4217959
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:11
- 大小:564.64KB
07使用DropDownList过滤的主从报表.docx
《07使用DropDownList过滤的主从报表.docx》由会员分享,可在线阅读,更多相关《07使用DropDownList过滤的主从报表.docx(11页珍藏版)》请在冰豆网上搜索。
07使用DropDownList过滤的主从报表
导言
主/从报表是一种很常见的报表,这类报表中首先会显示一些主记录.然后用户可以深入(追溯)某条主记录来查看该主记录的详情.主/从报表是显示一对多关系的理想选择,比如一个报表显示所有的产品类别,然后根据用户选择的特定类别显示与之关联的产品.另外,主/从表在显示”宽”表(有很多列的表)的详细信息时也很有用.例如主/从报表的主表部分显示数据库中产品表的产品名称和单价,具体到某一个产品时再显示其他的产品字段(类别,供应商,单位数量,等等).
有很多方法可以实现主/从报表.在这篇及接下来的3篇教程中我们将看到各种各样的主/从报表.在本篇中我们会看到如何在DropDownList控件中显示主记录以及在GridView中显示选中数据项的详细信息.具体来说,在本篇中主/从报表将会列出产类别及产品信息.
Step1:
在DropDownList中显示类别
我们的主/从报表将会在DropDownList中列出类别,根据选择的列表项在页面上的GridView显示相关的产品.我们的第一任务,就是要在DropDownList中显示类别.打开Filtering文件夹中的FilterByDropDownList.aspx,从工具箱中将一个DorpDownList控件拖放在该页上,设置它的ID属性为Categories.然后,单击”DropDownList任务”上的”选择数据源”链接.“选择数据源”向导启动.
图1:
指定DropDownList控件的数据源
添加一个数据源控件并命名为CategoriesDataSource,该控件将会调用CategoriesBLL类的GetCategories().
图2:
添加一个数据源控件并命名为CategoriesDataSource
图3:
选择使用CategoriesBLL类
图4:
配置数据源控件使用GetCategories()方法
配置完ObjectDataSource后还需要指定要在DropDownList中显示的数据字段,以及作为数据项的值(valueforthelistitem)的数据字段.我们指定CategoryName为要显示的列,指定CategoryID为数据项的值字段
图5:
指定CategoryName为要显示的列,CategoryID作为数据项的值。
这时,我们就有了一个使用Categories表中的记录来填充的DropDownList控件.图6显示了在浏览器中所看到的目前为止我们所做的工作.
图6:
DropDownList列出了当前的类别
Step2:
添加产品表格
在主/从报表的最后一步是列出与选定的类别相关联的产品.要实现该功能,在页面上增加一个GridView控件然后创建一个数据源控件(ObjectDataSource)并命名为productsDataSource.让productsDataSource控件从ProductsBLL类的GetProductsByCategoryID(categoryID)获取数据.
图7:
选择GetProductsByCategoryID(categoryID)方法
选择该方法之后,数据源控件(ObjectDataSource)向导会提示我们定义该方法的categoryID参数值.要使用categoriesDorpDownList中选择的值,设置参数源为Control,设置ControlID为Categories.
图8:
categoryID参数设置为CategoriesDropDownList的值
花一点时间在浏览器中检查一下我们前面所做的工作.第一次访问页面时,那些属于已选择类别(Beverages)的产品已经显示出来了(如图9),但是当改变DropDownList时并没有更新产品数据.这是由于必须引发一次回发(postback)GridView才会更新.有两个方法可以实现(两种方法都不需要写任何代码):
· 设置categories的AutoPostBack属性为True.(你可以选中DropDownList’ssmarttag上的EnableAutoPostBack选项.)这样,只要用户改变了DropDownList的选择项都会引起一次回发.所以,当用户在DropDownList中选择了一个新的类别就会引起一次回发,GridView也会随着新选择的类别更新产品数据.(在本教程中我们使用此方法.)
· DropDownList后面添加一个按钮控件. 设置他的Text属性为”刷新”或类似的文本.使用这种方法,用户需要选择一个新的类别然后单击该按钮.单击按钮将会引起一次回发并更新GridView显示已选择类别的产品.图9和图10演示了运行后的主/从报表.
图9:
第一次访问该页面时,显示Beverage的产品
图10:
选择一个新的产品,自动引起一次回发并更新GridView类别的产品.比起显示第一个类别的产品,我们可以为DropDownList添加一个默认选择项,比如“—选择类别--”,这样也许更友好一些.要给DropDownList增加一个新的数据项,在属性窗口中单击Items属性的省略号图标.添加一个新的数据项并设置Text为“—选择类别--”设置Value为-1.
图11:
增加“—选择类别--”数据项
除了上面的方法,你还可以使用下面的标记性语言(markup)为DorpDownList添加一个数据项:
DropDownListID="categories"runat="server"AutoPostBack="True"DataSourceID="categoriesDataSource" DataTextField="CategoryName"DataValueField="CategoryID"EnableViewState="False"> ListItemValue="-1">--ChooseaCategory-- ListItem>
DropDownList>
另外,我们需要把DropDownList控件的AppendDataBoundItems属性设置为True,因为数据源控件中的类别数据绑定到DropDownList时,将会覆盖所有的手工增加的列表项,除非你的AppendDataBoundItems属性设置True.
图12:
设置AppendDataBoundItems属性为True
这样,第一次访问该页面时,”—选择类别—“数据项是被选中并且不显示任何产品.
图13:
页面第一次加载时不显示产品
没有显示产品的原因是由于”—选择类别—“项被选中,该数据项的值是-1,而数据库中不存在CategoryID为-1的产品.如果这正是你想要的那现在就可以打完收工了,如果你希望在"--选择类别--"项选中时显示所有类别的产品,在ProductsBLL类中自定义GetProductsByCategoryID(categoryID)方法,如果categoryID参数值小于0则调用GetProducts()方法:
publicNorthwind.ProductsDataTableGetProductsByCategoryID(intcategoryID)
{
if(categoryID<0)
returnGetProducts();
else
returnAdapter.GetProductsByCategoryID(categoryID);
}
在这里使用的技巧与在后面的[声明式语法]教程中显示全部供应商的相似,尽管在这个例子中我们使用了-1而不是使用null来指示是否应该获取全部记录.这是因为GetProductsByCategoryID(categoryID)中的categoryID参数需要一个整型值,与之相反,在[声明式语法]教程中我们传入了一个字符串参数.
图14显示了当”—选择类别—“项选中时FilterByDropDownList.aspx页面的截屏.此时,所有类型的产品默认全部显示,用户可以通过选择特定的类别来缩小显示范围
图14:
默认情况下显示所有产品
总结
在显示分层次的关系数据时,经常使用主/从报表,通过它用户可以先看到最上层的数据,然后再深入到详细信息.在本指南中我们分析了构建一个简单的主/从报表来显示选定类别的产品.我们通过使用DropDownList控件列出类别以及GridView显示选定类别的产品完成了这个主/从报表.
在下一篇教程中,我们将通过使用两个DropDownList来进一步介绍DropDownList过滤的主/从报表。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 07 使用 DropDownList 过滤 主从 报表