九跨页面的主从报表

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ASP.NET2.0中的数据操作之九:跨页面的主/从报表作者:heker2007字体:[增加减小]类型:转载时间:2016-05-04我要评论本文主要介绍在ASP.NET2.0中通过HyperLinkField配置,将参数传递到新页面,在新页面显示相应的数据信息。导言在前面的两篇教程中,我们看到了如何在单一页面中显示主/从报表,它使用DropDownList显示主记录,使用GridView或DetailsView显示详细信息.另外一种常见的主/从报表模式是在一个页面中显示主记录而在另一个页面中显示详细信息.互联网上的论坛,如就是该模式在实际应用中非常典型例子.Asp.Net论坛由多个子论坛组成:GettingStarted,WebForms,DataPresentationControls等等.每个子论坛包含多个主题,每个主题又由多个贴子组成.在asp.net论坛主页上列出了这些子论坛,单击其中一个论坛会转到ShowForum.aspx页面,该页面列出了这个子论坛所包含的主题.同样,单击一个主题会转向ShowPost.aspx,该页面显示所单击主题的贴子.在这篇教程中,我们将通过使用GridView列出供应商来实现该模式.GridView中的每行(一行便是一个供应商)包含一个”查看产品”的链接.该链接在单击时会转到另外一个页面,这个页面显示选中供应商的所有产品.Step1:在Filtering文件夹下添加SupplierListMaster.aspx和ProductsForSupplierDetails.aspx在第三篇教程中定义页面结构时我们在BasicReporting,Filtering,和CustomFormatting文件夹中增加了好几个起始页面.我们还没有为这篇教程中添加起始页,在Filtering文件夹中增加两个页面:SupplierListMaster.aspx和ProductsForSupplierDetails.aspx.SupplierListMaster.aspx将会列出主记录(供应商)ProductsForSupplierDetails.aspx将会显示选中供应商的产品.在创建这两个页面时注意要让它们关联Site.master母版页.图1:在Filtering文件夹下添加SupplierListMaster.aspx和ProductsForSupplierDetails.aspx此外,添加了两个文件到该项目后,要确保相应地更新站点地图文件Web.sitemap.对于该篇教程只要简单地使用下面的XML内容做为元素的子节点提示:使用K.ScottAllen的免费的VisualStudioSiteMapMacro可以帮助你在新增ASP.NET页时自动地更新站点地图.Step2:SupplierListMaster.aspx中显示供应商列表添加SupplierListMaster.aspx和ProductsForSupplierDetails.aspx后,接下来就是要在SupplierListMaster.aspx页面上创建一个显示供应商的GridView.添加一个GridView到页面上并绑定到一个新的ObjectDataSource,这个ObjectDataSource应该使用SuppliersBLL类的GetSuppliers()方法返回所有供应商.图2:选择SuppliersBLL类图3:配置ObjectDataSource使用GetSuppliers()方法我们需要在每个GridView行中包含一个”查看产品”链接,单击时该链接会转到ProductsForSupplierDetails.aspx页面,并在查询字符串(querystring)传递选定行的SupplierID值.比如如果用户单击了供应商TokyoTraders(SupplierID值为4)的”查看产品”链接,将会转到ProductsForSupplierDetails.aspx?SupplierID=4.要实现该功能,给GridView添加一个HyperLinkField列,它会为每个GridView行增加一个链接.首先在GridView智能标记上单击编辑列链接.然后在左上角的列表中选择HyperLinkField并单击新增把HyperLinkField添加到GridView的字段列表中.图4:添加HyperLinkField到GridViewHyperLinkField可以被配置为在每一个GridView行中使用相同的文本或URL值,或是让这些值基于绑定到特定行的数据值.要指定一个所有行都一样的静态值使用HyperLinkField的Text或NavigateUrl属性.因为我们想让每一行的链接文本一致,设置HyperLinkField的Text属性为”查看产品”.图5:设置HyperLinkField的Text属性为”查看产品”要让text或URL基于绑定到GridView行的底层数据,可能通过DataTextField或DataNavigateUrlFields指定Text或URL要从中获取数据的数据字段.DataTextField只能设置为一个单一的数据字段;DataNavigateUrlFields可以设置为一个以逗号分隔的数据字段列表.我们需要让TEXT或URL基于当前行的数据字段值和一些标记.比如在这篇教程中,我们希望HyperLinkField的链接URL是ProductsForSupplierDetails.aspx?SupplierID=supplierID.其中supplierID是GridView的每个行的supplierID值.注意我们需要静态值和数据驱动值.ProductsForSupplierDetails.aspx?SupplierID=这部分是静态值.而supplierID部分便是数据驱动的,它的值是每一行的SupplierID值.要指定静态值和数据驱动值的混合物,使用DataTextFormatString和DataNavigateUrlFormatString属性.在这些属性中按需要输入静态文本,要显示DataTextField或DataNavigateUrlFields属性中特定的字段时使用{0}标记.如果DataNavigateUrlFields中有多个字段,在需要第一个字段时使用{0},第二个字段使用{1},以此类推.对于我们这篇教程来说,我们需要设置DataNavigateUrlFields为SupplierID,因为我们需要使用该数据字段自定义每行的链接.图6:配置HyperLinkField使用合适的基于SupplierID的链接地址.添加了HyperLinkField后,可以自定义及重新排列GridView的字段.下面是我做了修改后的标记(markup):在浏览器中访问一下SupplierListMaster.aspx.如图7所示,页面列出了所有的供应商,每个供应商包含”查看产品”链接.单击”查看产品”链接会转到ProductsForSupplierDetails.aspx,并在查询字符串中传递供应商的SupplierID值.图7:每个供应商都包含”查看产品”链接.Step3:在ProductsForSupplierDetails.aspx上列出供应商的产品SupplierListMaster.aspx页面使用户转到ProductsForSupplierDetails.aspx,并在查询字符串中传递选择的供应商的SupplierID值.本篇教程的最后一步是在ProductsForSupplierDetails.aspx页面上的GridView中显示产品.要实现该功能首先添加GridView到ProductsForSupplierDetails.aspx上,并使用一个新的命名为ProductsBySupplierDataSource的ObjectDataSource控件,该控件调用ProductsBLL类的GetProductsBySupplierID(supplierID)方法.图8:添加一个新的命名为ProductsBySupplierDataSource的ObjectDataSource图9:选择ProductsBLL类图10:让ObjectDataSource调用GetProductsBySupplierID(supplierID)方法配置数据源向导的最后一步是要我们提供GetProductsBySupplierID(supplierID)方法中supplierID参数的来源.要使用查询字符串中的值.设置参数源为QueryString并在QueryStringField文本框中输入查询字符串值的名称(SupplierID).图11:使用查询字符串中的SupplierID值做为supplierID参数的值这样就可以了!图12显示了当我们在SupplierListMaster.aspx页面中单击TokyoTraders供应商的”查看产品”链接时所看到的样子.图12:显示TokyoTraders供应商的产品在ProductsForSupplierDetails.aspx中显示供应商信息如图12所示,ProductsForSupplierDetails.aspx只列出了通过在查询字符串中指定的SupplierID的供应商的产品.然而,有些人会直接到达该页,这样他们就不清楚图12中正中显示TokyoTrader的产品了.要修正这个问题,我们可以在页面上显示供应商的信息.在GridView上方添加一个FormView.创建一个ObjectDataSource控件并命名为SuppliersDataSource.该控件调用SuppliersBLL类的GetSupplierBySupplierID(supplierID)方法.图13:选择SuppliersBLL类图14:让ObjectDataSource调用GetSupplierBySupplierID(supplierID)方法使用查询字符串中SupplierID的值为ProductsBySupplierDataSource的supplierID参数赋值.图15:让supplierID参数使用查询字符串中的SupplierID的值在设计视图中绑定FormView到ObjectDataSource时,VisualStudio将会自动的创建FormView的ItemTemplate,InsertItemTemplate和EditItemTemplate三个模板,这些模板使用Label和TextBoxWeb控件来呈现从ObjectDataSource返回的数据.因为我们只需要显示供应商信息,可以移除InsertItemTemplate和EditItemTemplat模板.然后,编辑ItemTemplate模板,使它在标签中显示供应商的公司名称,在公司名称下面显示地址,城市,国家和电话号码.另外你也可以手工设置FormView的DataSourceID和创建ItemTemplate的标记.就像我们在后面”使用ObjectDataSource显示数据”一篇中的所作的那样.修改后,Formview的标记看起来应该是这样:?123456789101112asp:FormViewID=FormView1runat=serverDataKeyNames=SupplierIDDataSourceID=suppliersDataSourceEnableViewState=FalseItemTemplateh3%#Eval(CompanyName)%/h3pasp:LabelID=AddressLabelrunat=serverText='%#Bind(Address)%'/asp:Labelbr/asp:LabelID=CityLabelrunat=serverText='%#Bi

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功