九:跨页面的主从报表_第1页
九:跨页面的主从报表_第2页
九:跨页面的主从报表_第3页
九:跨页面的主从报表_第4页
九:跨页面的主从报表_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ASP.NET 2.0中的数据操作之九:跨页面的主/从报表作者:heker2007 字体:增加 减小 类型:转载 时间:2016-05-04 我要评论本文主要介绍在ASP.NET 2.0中通过HyperLinkField配置,将参数传递到新页面,在新页面显示相应的数据信息。导言在前面的两篇教程中,我们看到了如何在单一页面中显示主/从报表, 它使用DropDownList显示主记录,使用GridView或DetailsView显示详细信息. 另外一种常见的主/从报表模式是在一个页面中显示主记录而在另一个页面中显示详细信息.互联网上的论坛,如 ,就是该模式在实际应用中

2、非常典型例子. Asp.Net论坛由多个子论坛组成: Getting Started, Web Forms, Data Presentation Controls 等等. 每个子论坛包含多个主题, 每个主题又由多个贴子组成. 在论坛主页上列出了这些子论坛,单击其中一个论坛会转到ShowForum.aspx页面, 该页面列出了这个子论坛所包含的主题. 同样,单击一个主题会转向ShowPost.aspx, 该页面显示所单击主题的贴子.在这篇教程中,我们将通过使用GridView列出供应商来实现该模式. GridView中的每行(一行便是一个供应商)包含一个”查看产品”的链接. 该链接在单击时会转到

3、另外一个页面, 这个页面显示选中供应商的所有产品.Step 1: 在Filtering文件夹下添加 SupplierListMaster.aspx 和ProductsForSupplierDetails.aspx在第三篇教程中定义页面结构时我们在BasicReporting, Filtering, 和 CustomFormatting文件夹中增加了好几个起始页面.我们还没有为这篇教程中添加起始页,在Filtering文件夹中增加两个页面: SupplierListMaster.aspx 和 ProductsForSupplierDetails.aspx. SupplierListMaster.

4、aspx将会列出主记录(供应商) ProductsForSupplierDetails.aspx将会显示选中供应商的产品.在创建这两个页面时注意要让它们关联Site.master母版页.图1: 在Filtering文件夹下添加 SupplierListMaster.aspx 和ProductsForSupplierDetails.aspx此外, 添加了两个文件到该项目后, 要确保相应地更新站点地图文件Web.sitemap. 对于该篇教程只要简单地使用下面的XML内容做为元素的子节点提示:使用K. Scott Allen的免费的Visual Studio Site Map Macro可以帮助你

5、在新增ASP.NET页时自动地更新站点地图.Step 2: SupplierListMaster.aspx中显示供应商列表添加SupplierListMaster.aspx 和 ProductsForSupplierDetails.aspx后,接下来就是要在SupplierListMaster.aspx页面上创建一个显示供应商的GridView. 添加一个GridView到页面上并绑定到一个新的ObjectDataSource, 这个ObjectDataSource应该使用SuppliersBLL类的GetSuppliers()方法返回所有供应商.图2: 选择 SuppliersBLL 类图3

6、: 配置ObjectDataSource 使用GetSuppliers() 方法我们需要在每个GridView行中包含一个”查看产品”链接,单击时该链接会转到ProductsForSupplierDetails.aspx页面, 并在查询字符串(querystring)传递选定行的SupplierID值.比如如果用户单击了供应商Tokyo Traders(SupplierID值为4)的”查看产品”链接,将会转到ProductsForSupplierDetails.aspx?SupplierID=4.要实现该功能, 给GridView添加一个HyperLinkField列, 它会为每个GridVi

7、ew行增加一个链接. 首先在GridView智能标记上单击编辑列链接. 然后在左上角的列表中选择HyperLinkField并单击新增把HyperLinkField添加到GridView的字段列表中.图4: 添加 HyperLinkField 到GridViewHyperLinkField可以被配置为在每一个GridView行中使用相同的文本或URL值,或是让这些值基于绑定到特定行的数据值. 要指定一个所有行都一样的静态值使用HyperLinkField的Text或NavigateUrl属性. 因为我们想让每一行的链接文本一致,设置HyperLinkField的Text属性为”查看产品”.图5

8、: 设置HyperLinkField的Text属性为”查看产品”要让text 或URL基于绑定到GridView行的底层数据, 可能通过DataTextField 或 DataNavigateUrlFields指定Text或URL要从中获取数据的数据字段. DataTextField只能设置为一个单一的数据字段; DataNavigateUrlFields可以设置为一个以逗号分隔的数据字段列表. 我们需要让TEXT或URL基于当前行的数据字段值和一些标记. 比如在这篇教程中,我们希望 HyperLinkField的链接URL是ProductsForSupplierDetails.aspx?Su

9、pplierID=supplierID. 其中supplierID是GridView的每个行的supplierID值. 注意我们需要静态值和数据驱动值. ProductsForSupplierDetails.aspx?SupplierID=这部分是静态值.而supplierID部分便是数据驱动的, 它的值是每一行的SupplierID值.要指定静态值和数据驱动值的混合物, 使用DataTextFormatString和DataNavigateUrlFormatString属性. 在这些属性中按需要输入静态文本,要显示DataTextField或DataNavigateUrlFields属性中特

10、定的字段时使用0标记. 如果DataNavigateUrlFields中有多个字段,在需要第一个字段时使用0, 第二个字段使用1,以此类推.对于我们这篇教程来说, 我们需要设置DataNavigateUrlFields为SupplierID, 因为我们需要使用该数据字段自定义每行的链接.图6: 配置HyperLinkField 使用合适的基于SupplierID 的链接地址.添加了HyperLinkField后, 可以自定义及重新排列GridView的字段. 下面是我做了修改后的标记 (markup):在浏览器中访问一下SupplierListMaster.aspx. 如图7所示, 页面列出了

11、所有的供应商,每个供应商包含”查看产品”链接. 单击”查看产品”链接会转到ProductsForSupplierDetails.aspx, 并在查询字符串中传递供应商的SupplierID值.图 7: 每个供应商都包含”查看产品”链接.Step 3: 在ProductsForSupplierDetails.aspx上列出供应商的产品SupplierListMaster.aspx页面使用户转到ProductsForSupplierDetails.aspx, 并在查询字符串中传递选择的供应商的SupplierID值. 本篇教程的最后一步是在ProductsForSupplierDetails.as

12、px 页面上的GridView中显示产品. 要实现该功能首先添加GridView到ProductsForSupplierDetails.aspx上,并使用一个新的命名为ProductsBySupplierDataSource的ObjectDataSource控件, 该控件调用ProductsBLL 类的GetProductsBySupplierID(supplierID)方法.图8: 添加一个新的命名为 ProductsBySupplierDataSource 的ObjectDataSource图9: 选择ProductsBLL 类图10: 让ObjectDataSource 调用 GetPr

13、oductsBySupplierID(supplierID) 方法配置数据源向导的最后一步是要我们提供GetProductsBySupplierID(supplierID) 方法中 supplierID 参数的来源. 要使用查询字符串中的值. 设置参数源为QueryString 并在QueryStringField文本框中输入查询字符串值的名称(SupplierID).图11: 使用查询字符串中的SupplierID值做为supplierID 参数的值这样就可以了! 图12显示了当我们在SupplierListMaster.aspx页面中单击Tokyo Traders供应商的”查看产品”链接时

14、所看到的样子.图12: 显示Tokyo Traders 供应商的产品在ProductsForSupplierDetails.aspx中显示供应商信息如图12所示, ProductsForSupplierDetails.aspx只列出了通过在查询字符串中指定的SupplierID的供应商的产品. 然而, 有些人会直接到达该页, 这样他们就不清楚图12中正中显示Tokyo Trader的产品了. 要修正这个问题, 我们可以在页面上显示供应商的信息.在GridView上方添加一个FormView. 创建一个ObjectDataSource控件并命名为SuppliersDataSource. 该控件调

15、用SuppliersBLL类的GetSupplierBySupplierID(supplierID)方法.图13: 选择 SuppliersBLL 类图14: 让ObjectDataSource 调用 GetSupplierBySupplierID(supplierID) 方法使用查询字符串中SupplierID的值为ProductsBySupplierDataSource的supplierID参数赋值.图15: 让supplierID 参数使用查询字符串中的SupplierID 的值在设计视图中绑定FormView到ObjectDataSource时, Visual Studio 将会自动的

16、创建FormView的ItemTemplate, InsertItemTemplate 和 EditItemTemplate 三个模板, 这些模板使用Label和TextBox Web控件来呈现从ObjectDataSource返回的数据. 因为我们只需要显示供应商信息, 可以移除InsertItemTemplate 和 EditItemTemplat模板. 然后,编辑ItemTemplate模板,使它在标签中显示供应商的公司名称, 在公司名称下面显示地址,城市,国家和电话号码. 另外你也可以手工设置 FormView的 DataSourceID和创建ItemTemplate的标记. 就像我们

17、在后面”使用ObjectDataSource显示数据”一篇中的所作的那样.修改后,Formview的标记看起来应该是这样:?123456789101112<asp:FormView ID="FormView1" runat="server" DataKeyNames="SupplierID" DataSourceID="suppliersDataSource" EnableViewState="False"><ItemTemplate><h3><%# E

18、val("CompanyName") %></h3><p><asp:Label ID="AddressLabel" runat="server" Text='<%# Bind("Address") %>'></asp:Label><br /><asp:Label ID="CityLabel" runat="server" Text='<%# Bind("

19、City") %>'></asp:Label>,<asp:Label ID="CountryLabel" runat="server" Text='<%# Bind("Country") %>'></asp:Label><br />Phone:<asp:Label ID="PhoneLabel" runat="server" Text='<%# Bind("Ph

20、one") %>'></asp:Label></p></ItemTemplate></asp:FormView>图16显示了包含了供应商信息后的ProductsForSupplierDetails.aspx页面截屏.图16: 包含供应商概括信息的产品列表为ProductsForSupplierDetails.aspx 用户界面应用些小技巧.要改善该报表的用户体验, 应该给ProductsForSupplierDetails.aspx页面添加点东西. 现在用户从ProductsForSupplierDetails.as

21、px回到供应商列表页面的唯一方法是单击浏览器的后退按钮. 让我们给ProductsForSupplierDetails.aspx增加一个HyperLink控件, 该控件指向SupplierListMaster.aspx, 这样就给用户提供了另外一个回到供应商列表的方法.图17: 增加一个HyperLink 控件让用户可以回到SupplierListMaster.aspx如果用户单击了某个供应商的”查看产品”链接,而该供应商又没有任何产品, ProductsForSupplierDetails.aspx 上的ProductsBySupplierDataSource ObjectDataSource将不会返回任何结果. 绑定到ObjectDataSource的GridView不会呈

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论