当前位置: 移动技术网 > IT编程>开发语言>.net > 在ASP.NET 2.0中操作数据之三十三:基于DataList和Repeater使用DropDownList过滤的主/从报表

在ASP.NET 2.0中操作数据之三十三:基于DataList和Repeater使用DropDownList过滤的主/从报表

2017年12月12日  | 移动技术网IT编程  | 我要评论

钢管市场,李嘉诚豪宅别墅图片,老人的故事

导言

  在前面的使用dropdownlist过滤的主/从报表一章里我们使用gridview创建的主/从表,显示一些"主"记录.用户可以根据主记录来查看"从"(详细)的内容.主/从表在呈现一对多关系和含多列的表的信息时是一个好的选择.在前面我们已经学过如何使用gridview和detailsview来实现.本章和后面两章我们将重新复习一下这些概念,但是主要学习使用datalist和repeater来实现.本章我们将学习使用dropdownlist包含主记录,而在datalist里显示从记录.

第一步: 增加主/从教程页

首先增加本教程会用到的文件夹(datalistrepeaterfiltering)和页.新建页的时候记得选择site.master.

default.aspx
filterbydropdownlist.aspx
categorylistmaster.aspx
productsforcategorydetails.aspx
categoriesandproducts.aspx

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909345888.jpg
图 1: 创建datalistrepeaterfiltering文件夹和页

然后打开default.aspx页,将sectionleveltutoriallisting.ascx用户控件拖进来.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909343945.jpg
图2: 在default.aspx页里增加sectionleveltutoriallisting.ascx

我们需要将主/从教程添加到site map里.打开web.sitemap,将下面的标记添加到“displaying data with the datalist and repeater”节点后:

<sitemapnode
 title="master/detail reports with the datalist and repeater"
 description="samples of reports that use the datalist and repeater controls"
 url="~/datalistrepeaterfiltering/default.aspx">
 
 <sitemapnode
 title="filter by drop-down list"
 description="filter results using a drop-down list."
 url="~/datalistrepeaterfiltering/filterbydropdownlist.aspx" />
 
 <sitemapnode
 title="master/detail across two pages"
 description="master records on one page, detail records on another."
 url="~/datalistrepeaterfiltering/categorylistmaster.aspx" />
 
 <sitemapnode
 title="maser/detail on one page"
 description="master records in the left column, details on the right,
   both on the same page."
 url="~/datalistrepeaterfiltering/categoriesandproducts.aspx" />
 
</sitemapnode>

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909342689.jpg
图 3: 更新之后的site map

第二步: 在dropdownlist里显示categories

  我们的主/从表将在dropdownlist里列出categories ,然后将选择的item的product用datalist显示出来.打开datalistrepeaterfiltering文件夹里的filterbydropdownlist.aspx页,拖一个dropdownlist进来.将dropdownlist的id设为categories.在智能标签上选择选择数据源,创建一个名为categoriesdatasource的objectdatasource

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909342502.jpg
图 4: 添加一个名为categoriesdatasource的 objectdatasource

  使用categoriesbll类的getcategories()方法配置objectdatasource.然后为dropdownlist的text和value配置字段(分别为categoryname和categoryid).

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909357017.jpg
图 5: 配置dropdownlist的text和value

现在dropdownlist里已经列出了categories表里记录.见图6.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909358302.jpg
图 6: 完成后的dropdownlist

第三步: 添加products datalist

  下面将选择的category关联的product列出来.添加一个datalist,创建一个名为productsbycategorydatasource的objectdatasource.用productsbll类的getproductsbycategoryid(categoryid)来配置它.因为我们的报表是只读的,所以在insert,update和delete标签里选择none.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909357046.jpg
图 7: 选择getproductsbycategoryid(categoryid)方法

点下一步,向导会提示我们为categoryid参数选择source.将parameter source设为control,controlid设为categories.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909354318.jpg
图 8: 设置categoryid参数为categories dropdownlist

  完成上面的配置后,visual studio会为datalist自动生成一个itemtemplate来显示每个字段的name和value.我们来做一些改进,只显示product的name,category,supplier,quantity和price,并在每个item之间加一个<hr>元素(seoaratortemplate).我们将使用datalist和repeater来显示数据 的itemtemplate例子.objectdatasource的标记语言应该和下面差不多:

<asp:datalist id="datalist1" runat="server" datakeyfield="productid"
 datasourceid="productsbycategorydatasource" enableviewstate="false">
 <itemtemplate>
 <h4>
  <asp:label id="productnamelabel" runat="server"
  text='<%# eval("productname") %>' />
 </h4>
 <table border="0">
  <tr>
  <td class="productpropertylabel">category:</td>
  <td><asp:label id="categorynamelabel" runat="server"
   text='<%# eval("categoryname") %>' /></td>
  <td class="productpropertylabel">supplier:</td>
  <td><asp:label id="suppliernamelabel" runat="server"
   text='<%# eval("suppliername") %>' /></td>
  </tr>
  <tr>
  <td class="productpropertylabel">qty/unit:</td>
  <td><asp:label id="quantityperunitlabel" runat="server"
   text='<%# eval("quantityperunit") %>' /></td>
  <td class="productpropertylabel">price:</td>
  <td><asp:label id="unitpricelabel" runat="server"
   text='<%# eval("unitprice", "{0:c}") %>' /></td>
  </tr>
 </table>
 </itemtemplate>
 <separatortemplate>
 <hr />
 </separatortemplate>
</asp:datalist>
 
<asp:objectdatasource id="productsbycategorydatasource" runat="server"
 oldvaluesparameterformatstring="original_{0}"
 selectmethod="getproductsbycategoryid" typename="productsbll">
 <selectparameters>
 <asp:controlparameter controlid="categories" name="categoryid"
  propertyname="selectedvalue" type="int32" />
 </selectparameters>
</asp:objectdatasource>

  在浏览器里看一下页面.第一次访问时,和beverager关联的product都显示出来了(图9),但是改变dropdownlist不会更新数据,这是因为还更新datalist需要postback.我们将dropdownlist的autopostback属性设为true.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909354131.jpg
图 9: 第一次访问时, 显示beverage的 products

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909358645.jpg
图 10: 选择一个新的category(produce),更新datalist

  添加一个 “-- choose a category --” list item第一次访问页面时,beveages默认被选中,并且在datalist里显示它的product.在使用dropdownlist过滤的主/从报表 里我们添加了“-- choose a category --”选项(默认项),显示所有的product.在gridview里显示product时这样很方便.而对datalist而言,每个product要占很大一块屏幕,因此在选择“-- choose a category --”时底下将不显示product.在dropdownlist的属性里选择items属性,添加一个text为“-- choose a category --”,value为0的项.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909359931.jpg
图 11: 添加 “-- choose a category --” 项

你也可以直接在dropdownlist的标记语言里添加以下代码:

<asp:dropdownlist id="categories" runat="server" autopostback="true"
 datasourceid="categoriesdatasource" datatextfield="categoryname"
 datavaluefield="categoryid" enableviewstate="false">
 
 <asp:listitem value="0">-- choose a category --</asp:listitem>
 
</asp:dropdownlist>
   

  另外我们需要将dropdownlist的appenddatabounditems设为true.因为如果为false(默认),当categories绑定到dropdownlist时将覆盖手工添加的list item.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909363690.jpg
图 12: set the appenddatabounditems property to true

  我们将“-- choose a category --” 的value设为0是因为系统里没有categories的value为0,因此当选择这条category时不会有product返回.浏览一下网页来确认这点.见图13.

http://www.lhsxpumps.com/_images/10qianwan/20171212/b_1_201712121909364975.jpg
图 13: 选中“-- choose a category --” 时, 没有products 被显示

  如果你想在选择“-- choose a category --” 时显示所有的product,将它的value设为1.细心的读者会记起来在使用dropdownlist过滤的主/从报表 里我们更新了productsbll类的getproductsbycategoryid(categoryid)方法,如果categoryid为1时所有的product记录会被返回.

总结

  当显示层次关系的数据时,使用主/从表来展示数据很有帮助.用户可以通过它从最高层的数据开始,逐渐进入最细节的数据.在本章我们学习了一个简单的主/从表来显示选中的category下的product.我们用dropdownlist列出dategory,datalist来显示product.在下章我们将学习将主/从记录分开到两个页面.在第一个页里,显示所有的"主"记录,并有一个链接到"从"信息的link.点这个link用户会看到显示细节信息的页.

  祝编程愉快!

作者简介

  scott mitchell,著有六本asp/asp.net方面的书,是4guysfromrolla.com的创始人,自1998年以来一直应用 微软web技术。scott是个独立的技术咨询顾问,培训师,作家,最近完成了将由sams出版社出版的新作,24小时内精通asp.net 2.0。他的联系电邮为,也可以通过他的博客与他联系。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网