介绍
主/从报表是一种非常常见的报表,首先会显示一些主记录。然后,用户可以深入(跟踪)主记录以查看主记录的详细信息。主/从报告是显示一对多关系的理想选择。例如,报告显示所有产品类别,然后根据用户选择的特定类别显示与之关联的产品。此外,主/从表在显示“宽”表(多列表)的详细信息时也非常有用。例如,主/从报表的主表部分显示数据库中产品表的产品名称和单价,然后显示其他产品字段(类别、供应商、单位数量等)。)谈到具体的产品。
有许多方法可以实现主/从报告。在本教程和接下来的三个教程中,我们将看到各种主/从报告。在本文中,我们将看到如何在DropDownList控件中显示主记录,以及在GridView中显示选定数据项的详细信息。具体来说,在本文中,主/从报告将列出产品类别和产品信息。
步骤1:在DropDownList中显示类别。
我们的主/从报表会在DropDownList中列出类别,并根据选择的列表项在页面的GridView中显示相关产品。我们的第一个任务是在DropDownList中显示类别。在“筛选”文件夹中打开FilterByDropDownList.aspx。将DorpDownList控件从工具箱拖放到页面上,并将其“标识”属性设置为“类别”。然后,单击下拉列表任务上的选择数据源链接。“选择数据源”向导启动。
图1:指定DropDownList控件的数据源。
添加一个数据源控件并将其命名为CategoriesDataSource,它将调用CategoriesBLL类的GetCategories()。
图2:添加一个数据源控件,并将其命名为类别数据源。
图3:选择使用CategoriesBLL类。
图4:将数据源控件配置为使用GetCategories()方法。
配置ObjectDataSource之后,我们还需要指定要在DropDownList中显示的数据字段,并将该数据字段指定为列表项的值。我们指定CategoryName作为要显示的列,CategoryID作为数据项的值字段。
图5:指定CategoryName作为要显示的列,CategoryID作为数据项的值。
此时,我们有一个DropDownList控件,其中填充了类别表中的记录。图6显示了到目前为止我们在浏览器中所做的工作。
图6:下拉列表列出了当前类别。
步骤2:添加产品表。
主/从报告的最后一步是列出与所选类别相关的产品。要实现这个功能,在页面上添加一个GridView控件,然后创建一个名为productsDataSource的数据源控件(ObjectDataSource)。让productsDataSource控件从ProductsBLL类的getproductbycategoryid(categoryid)中获取数据。
图7:选择getproducts by Categoryid(Categoryid)方法。
选择此方法后,ObjectDataSource向导将提示我们定义此方法的categoryID参数值。要使用在类别列表中选择的值,请将参数源设置为控制,并将控制标识设置为类别。
图8:类别标识符参数被设置为类别下拉列表的值。
花点时间在浏览器中查看我们之前的工作。当第一次访问该页面时,已经显示了属于所选类别的产品(如图9所示),但是当DropDownList改变时,产品数据没有更新。这是因为回发)GridView必须在更新之前被触发。有两种方法可以实现(两种方法都不需要写任何代码)。
将类别的“自动回邮”属性设置为“真”。(您可以在DropDownList的智能标记上选择“启用自动回写”选项。)这样,只要用户更改DropDownList的选项,就会引起回发。因此,当用户在DropDownList中选择新的类别时,会导致回发,GridView会用新选择的类别更新产品数据。(我们在本教程中使用这种方法。).
在DropDownList后添加按钮控件。将其文本属性设置为“刷新”或类似文本。这样,用户需要选择一个新的类别,然后点击按钮。单击该按钮将导致回发,并更新GridView以显示所选类别的产品。图9和10展示了运行后的主/从报告。
图9:第一次访问此页面时,显示Beyond的产品。
图10:选择新产品会自动导致回发并更新GridView类别产品。
相比于展示第一类的产品,我们可以为DropDownList增加一个默认的选择项,比如“-select category-”,可能会更友好一些。要向DropDownList添加新数据项,请在属性窗口中单击“项”属性的省略号图标。添加新的数据项,并将文本设置为“-选择类别-”,将值设置为-1。
图11:“-选择类别-“添加数据项。
除了上述方法之外,还可以使用以下标记语言将数据项:添加到DorpDownList中。
asp3360 DropDownList ID=' categories ' runat=' server ' AutoPostBack=' True ' DataSourceID=' categoriesdata source ' DataTextField=' CategoryName ' DataValueField=' categoryid ' enableviewstate=' false ' ASP 3360 list item值='-1 '-选择一个类别-/ASP 3360 list item/ASP : DropDownList另外,我们需要将DropDownList控件的AppendDataBoundItems属性设置为True,因为当类别
图12:将AppendDataBoundItems属性设置为真。
这样,当第一次访问该页面时,“—选择类别—”数据项被选择,并且不显示任何产品。
图13:首次加载产品时,页面不显示产品。
不显示产品的原因是选择了项目“-select category-”,该数据项的值为-1,但数据库中没有CategoryID -1的产品。如果这正是你想要的,你现在就可以完成这项工作。如果要在选择项目“-select category-”时显示所有产品类别,请在ProductsBLL类中自定义GetProductByCategoryid(categoryID)方法,如果categoryid参数值小于0,则调用getproducts()方法3360。
公共北风。productdatatable getproductbycategoryid(int categoryID){ if(categoryID 0)返回GetProducts();否则返回适配器。getproductbycategoryid(categoryID);}这里使用的技术类似于后面教程【声明式语法】中显示所有供应商的技术,尽管在本例中我们使用了-1而不是null来指示是否应该获取所有记录。这是因为getproductbycategoryid(categoryID)中的categoryID参数需要一个整数值,相反,我们在教程【声明式语法】中传入了一个字符串参数。
图14显示了当选择“-select category-”时FilterByDropDownList.aspx页面的截图。此时,默认显示所有类型的产品,用户可以通过选择特定的类别来缩小显示范围。
图14:默认显示所有产品。
摘要
在显示层次关系数据时,我们经常使用主/从报表,通过主/从报表,用户可以首先看到顶层数据,然后深入到详细信息。在本指南中,我们分析并构建了一个简单的主/从报告来显示所选类别的产品。我们通过使用DropDownList控件列出类别和GridView显示所选类别的产品来完成这个主/从报告。
在下一个教程中,我们将进一步介绍DropDownList通过使用两个DropDownList过滤的主/从报告。
编程快乐!
添加“选择类别”列表项。
第一次访问FilterByDropDownList.aspx页面时,默认情况下会选择DropDownList类别中的第一个数据项(饮料),饮料也会显示在GridView中。
作者简介
斯科特米切尔,六本关于ASP/ASP的书的作者。NET,是4GuysFromRolla.com的创始人,自1998年以来一直使用微软的网络技术。Scott是一名独立的技术顾问、培训师和作家,最近完成了一部即将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电子邮件是[emailprotected],也可以通过他的博客http://scottonwriting.net/.联系到他