手机版

ASP.NET 2.0中的数据操作IX:跨页主/从报告

时间:2021-11-01 来源:互联网 编辑:宝哥软件园 浏览:

介绍

在前两个教程中,我们看到了如何在单个页面上显示主/从报告,该页面使用DropDownList显示主记录,使用GridView或DetailsView显示详细信息。另一种常见的主/从报告模式是在一页上显示主记录,在另一页上显示详细信息。互联网论坛,如www.asp.net,就是这种模式在实际应用中的典型例子。Asp.Net论坛由:入门、网页表单、数据展示控件等多个子论坛组成。每个分论坛包含几个主题。每个主题由多个帖子组成。这些子论坛列在ASP.NET论坛的主页上。单击其中一个论坛将转到ShowForum.aspx页面,其中列出了此子论坛中包含的主题。同样,单击一个主题将转到ShowPost.aspx,它显示被单击主题的帖子。

在本教程中,我们将使用GridView列出供应商来实现这种模式。GridView中的每一行(一行是供应商)都包含一个指向“查看产品”的链接。点击后,该链接将转到另一个页面,显示所选供应商的所有产品。

步骤1:在“过滤”文件夹下添加SupplierListMaster.aspx和productsforsupplierdetails.aspx。

在第三个教程中定义页面结构时,我们在基本分类、过滤和自定义格式文件夹中添加了几个起始页。我们还没有为本教程添加起始页。在Filtering文件夹中添加两页: SupplierListMaster.aspx和productforsupplierdetails . aspx . supplier listmater . aspx,列出主记录(供应商)。aspx将显示所选供应商的产品。

创建这两个页面时,请注意将它们与Site.master母版页相关联。

//files.jb51.net/file_images/article/201605/20165495652078.png

图1:在“过滤”文件夹下添加SupplierListMaster.aspx和ProductsForSupplierDetails.aspx。

此外,向项目中添加两个文件后,请确保相应地更新站点地图文件Web.sitemap。对于本教程,只需使用以下XML内容作为元素的子节点。

提示:使用K. Scott Allen的免费Visual Studio站点地图宏可以帮助您在添加ASP.NET页面时自动更新站点地图。

步骤2:供应商列表master.aspx显示供应商列表。

添加supplierlistmater . aspx和product for supplierdetails . aspx,下一步是在supplierlistmater . aspx页面上创建一个显示供应商的GridView。向页面添加一个GridView,并将其绑定到一个新的ObjectDataSource,该数据源应该使用SuppliersBLL类的GetSuppliers()方法返回所有供应商。

//files.jb51.net/file_images/article/201605/2016050409491337.png

图2:选择供应商类别。

//files.jb51.net/file_images/article/201605/2016050409491338.png

图3:使用GetSuppliers()方法配置对象数据源。

我们需要在每个GridView行中包含一个“查看产品”链接,单击该链接时将转到ProductsforSupplierDetails.aspx的页面,并在querystring中传递所选行的SupplierID值。例如,如果用户点击供应商东京贸易商的“查看产品”链接(SupplierID值为4),他将转到ProductsforSupplierDetails.aspx?SupplierID=4。

为了实现这个功能,在GridView中添加一个超链接字段列,这将为每个GridView行添加一个链接。首先,单击GridView智能标记上的编辑列链接。然后从左上角的列表中选择超链接字段,并单击添加将超链接字段添加到GridView字段列表中。

//files.jb51.net/file_images/article/201605/2016050409491739.png

图4:向GridView添加超链接字段。

超链接字段可以配置为在每个GridView行中使用相同的文本或网址值,或者这些值可以基于绑定到特定行的数据值。要为所有行指定相同的静态值,请使用超链接字段的文本或导航属性。因为我们希望每行的链接文本一致,所以将超链接字段的文本属性设置为“查看产品”。

//files.jb51.net/file_images/article/201605/2016050409491740.png

图5:将超链接字段的文本属性设置为“查看产品”。

要使文本或网址基于绑定到GridView行的基础数据,您可以指定数据字段,文本或网址将从该数据字段通过数据文本字段或数据导航字段获取数据。数据文本字段只能设置为单个数据字段;数据导航字段可以设置为以逗号分隔的数据字段列表。我们需要基于当前行的数据字段值和一些标签来创建文本或网址。例如,在本教程中,我们希望HyperLinkField的链接URL是productsforSupplierdetails.aspx?SupplierID=supplierID。其中supplierID是GridView中每行的supplierid值。注意,我们需要静态值和数据驱动值。product for supplierdetails . aspx?SupplierID=该部分为静态值,而SupplierID部分为数据驱动,其值为每行的SupplierID值。

若要指定静态值和数据驱动值的混合,请使用DataTextFormatString和DataNavigateUrlFormatString属性。根据需要在这些属性中输入静态文本。在数据文本字段或数据导航字段属性中显示特定字段时,请使用{0}标记。如果数据导航器字段中有多个字段,则需要第一个字段时使用{0},第二个字段使用{1},依此类推。

在我们的教程中,我们需要将数据导航字段设置为供应商标识,因为我们需要使用这个数据字段来定制每行的链接。

//files.jb51.net/file_images/article/201605/2016050409491741.png

图6:配置超链接字段,根据供应商标识使用合适的链接地址。

添加超链接字段后,您可以自定义和重新排列GridView字段。下面是我修改后的加价):

在浏览器中访问SupplierListMaster.aspx。如图7所示,该页面列出了所有供应商,每个供应商都包含一个“查看产品”链接。单击“查看产品”链接将转到product for supplierdetails . aspx,并在查询字符串中传递供应商的SupplierID值。

//files.jb51.net/file_images/article/201605/2016050409491842.png

图7:每个供应商都包含一个“查看产品”链接。

步骤3:在products for supplierdetails . aspx上列出供应商的产品

SupplierListMaster.aspx页面将用户定向到productsforsupplierdetails.aspx,并在查询字符串中传递所选供应商的SupplierID值。本教程的最后一步是在products for supplierdays . aspx的页面上的GridView中显示产品,要实现这个功能,首先要将GridView添加到products for supplierdays . aspx中,并使用一个名为ProductsBySupplierDataSource的新ObjectDataSource控件,该控件调用ProductsBLL类的getproductsbysupplierid(supplier id)方法。

//files.jb51.net/file_images/article/201605/2016050409491843.png

图8:添加一个名为ProductsBySupplierDataSource的新对象数据源。

//files.jb51.net/file_images/article/201605/2016050409491844.png

图9:选择产品类别。

//files.jb51.net/file_images/article/201605/2016050409491845.png

图10:让ObjectDataSource调用getproductbysupplierid(supplieriid)方法。

数据源配置向导的最后一步是在GetProductBySuppLierid(supplierID)方法中提供supplier id参数的来源。要使用QueryString中的值,请将参数源设置为querystring,并在QueryStringField文本框中输入查询字符串值的名称(supplierid)。

//files.jb51.net/file_images/article/201605/2016050409492246.png

图11:使用查询字符串中的供应商标识值作为供应商标识参数的值。

就这样!图12显示了当我们在SupplierListMaster.aspx页面中点击东京贸易商供应商的“查看产品”链接时看到的内容。

//files.jb51.net/file_images/article/201605/2016050409492547.png

图12:显示了东京贸易商供应商的产品。

在products for supplierdetails . aspx中显示供应商信息。

如图12所示,products for supplierdetails . aspx只列出通过查询字符串中指定的SupplierID的供应商的产品。但是,有些人会直接去页面,这样他们就不清楚图12所示的Tokyo Trader的产品。要解决这个问题,我们可以在页面上显示供应商的信息。

在GridView上方添加一个窗体视图。创建一个ObjectDataSource控件,并将其命名为SuppliersDataSource。这个控制项会呼叫supplierbysupplirid(supplier id)类别的getsupplierbysuppliderid(supplier id)方法。

//files.jb51.net/file_images/article/201605/2016050409492548.png

图13:选择供应商类别。

//files.jb51.net/file_images/article/201605/2016050409492649.png

图14:让ObjectDataSource调用getsupplierbysupplieriid(supplier id)方法。

使用查询字符串中的供应商标识值为ProductsBySupplierDataSource的供应商标识参数赋值。

//files.jb51.net/file_images/article/201605/2016050409492650.png

图15:让supplierID参数在查询字符串中使用SupplierID的值。

在设计视图中将窗体视图绑定到对象数据源时,Visual Studio将自动创建窗体视图的三个模板:itemtemplate、insert itemtemplate和EditItemTemplate。这些模板使用标签和文本框控件来显示从对象数据源返回的数据。因为我们只需要显示供应商信息,所以可以删除InsertItemTemplate和EditItemTemplat模板。然后,编辑项目模板模板,在标签中显示供应商的公司名称。在公司名称下,显示地址、城市、国家和电话号码。此外,您还可以手动设置FormView的DataSourceID,并创建ItemTemplate的标记,就像我们在下面的文章“使用ObjectDataSource显示数据”中所做的那样。

修改后,Formview的标签应该是这样的:

asp3360 FormView ID=' FormView1 ' Runat=' Server ' DataKeyNames=' suppliierid ' DataSourceID=' suppliiersadasource ' EnableViewState=' False ' itemtapeh3 % # Eval(' company name ')%/h3pasp 3360 Label ID=' Address Label ' Runat=' Server ' Text=' % # Bind(' Address ')% '/asp3360 Label ID=' City Label ' Runat=' Server ' Text='

//files.jb51.net/file_images/article/201605/2016050409493151.png

图16:包含供应商汇总信息的产品列表。

将一些提示应用到ProductsforSupplierDetails.aspx的用户界面上.

为了改善这份报告的用户体验,我们应该在ProductsForSupplierDetails.aspx的页面上添加一些东西,现在,用户从ProductsForSupplierDetails.aspx返回供应商列表页面的唯一方法是点击浏览器的后退按钮。让我们向products for supplierdetails . aspx . Link控件添加一个Hyper,该控件指向SupplierListMaster.aspx,从而为用户提供了另一种返回供应商列表的方法。

//files.jb51.net/file_images/article/201605/2016050409493152.png

图17:添加一个HyperLink控件,这样用户就可以返回到SupplierListMaster.aspx

如果用户单击供应商的“查看产品”链接,而该供应商没有任何产品,则Products by supplierdata source objectdata source on Products for supplierdetails . aspx将不会返回任何结果。绑定到objectdatasource的GridView不会呈现任何标记。它在用户的浏览器中显示为空白。为了明确告诉用户没有与所选供应商相关联的产品,我们可以将GridView的EmptyDataText属性设置为发生这种情况时要显示的消息。我们将其设置为:“本供应商无产品……”;

默认情况下,北风数据库中的所有供应商至少提供一种产品。但是,在本教程中,我已经手动修改了产品表,使供应商Escargots Nouveaux不再与任何产品相关联。图18显示了修改后的供应商新蜗牛的详细页面。

//files.jb51.net/file_images/article/201605/2016050409493153.png

图18:提示用户供应商没有提供任何产品。

摘要

主/从报告可以同时在一页上显示主记录和详细记录。在很多网站上,主/从记录也分别显示在两个页面上。在本教程中,我们已经看到了如何实现该报告,该报告在主页面的GridView中显示供应商列表,在详细信息页面显示相关产品列表。主页上的每个供应商都包含指定详细信息页面的链接。并传递SupplierID值。使用GridView的HyperLinkField可以很容易地实现这样一个特定的行链接。

调用ProductsBLL类的getproductbysupplierid(supplier id)方法,获取详细信息页面中指定供应商的产品。supplierid参数的值在查询字符串中指定。我们还看到了如何使用FormView在详细信息页面中显示供应商详细信息。

下一个教程是主/从报告的最后一部分。我们将看到如何在GridView中列出产品。GridView中的每一行都有一个选择按钮。单击选择按钮将在同一页面的DetailsView中显示该产品的详细信息。

编程快乐!

作者简介

斯科特米切尔,六本关于ASP/ASP的书的作者。NET,是4GuysFromRolla.com的创始人,自1998年以来一直使用微软的网络技术。Scott是一名独立的技术顾问、培训师和作家,最近完成了一部即将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电子邮件是[emailprotected],也可以通过他的博客http://scottonwriting.net/.联系到他

版权声明:ASP.NET 2.0中的数据操作IX:跨页主/从报告是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。