手机版

在ASP.NET 2.0中操作数据:使用对象数据源显示数据

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

在完成应用程序架构和页面的设计后,我们可以开始讨论如何实现向报表呈现公共数据的各种任务。我们已经学习了如何将数据访问层和业务逻辑层的数据绑定到ASP.NET页面上的数据控件。在ASP.NET 1 . x应用程序中,通过为数据控件的DataSource属性赋值,然后调用控件的DataBind()方法来表示数据的方式可以在ASP.NET 2.0应用程序中继续使用。然而,ASP.NET 2.0的数据源控件提供了一种新的方式,它使您可以轻松地绑定来自上面创建的业务逻辑层的数据,甚至不需要手工编写一行代码。

ASP。NET 2.0提供了五个内置的数据源控件:SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource和SiteMapDataSource,尽管如果需要,您可以构建自己的自定义数据源控件。既然我们已经完成了上一篇文章中应用程序示例的系统架构,我们将基于现有的业务逻辑类使用ObjectDataSource。

//files.jb51.net/file_images/article/201604/2016042909362616.png

图1: ASP.NET 2.0包括五个内置数据源控件。

对象数据源充当其他对象的代理。通过配置对象数据源,我们指定这些底层对象以及这些对象的方法如何映射到对象数据源的选择、插入、更新和删除方法。一旦指定了基础对象,并且它的方法被映射到ObjectDataSource的方法,我们就可以将ObjectDataSource绑定到页面上的数据Web服务器控件。ASP.NET提供了许多数据Web服务器控件,包括GridView、DetailsView、RadioButtonList、DropDownList等。在页面的生命周期中,数据Web服务器控件可能需要访问其绑定的数据,这将通过调用ObjectDataSource的Select方法来实现;如果数据网站服务器控件也支持插入、更新或删除,则将调用ObjectDataSource的插入、更新或删除方法。这些调用通过ObjectDataSource发送到相应底层对象的方法,如下图所示。

//files.jb51.net/file_images/article/201604/2016042909362717.png

图2:对象数据源充当代理。

虽然ObjectDataSource用于插入、更新或删除数据,但目前我们只关注返回数据,后面的章节将讨论如何使用ObjectDataSource和Data Web服务器控件来修改数据。

步骤1:添加和配置对象数据源控件。

首先,在基本文件夹中打开SimpleDisplay.aspx页面,切换到设计视图,并将ObjectDataSource控件从工具箱拖到页面上。它在设计界面中显示为灰色正方形,因为它不产生任何声明标记;它只是通过调用公式化对象的方法来访问数据。ObjectDataSource返回的数据可以呈现给数据Web服务器控件,如GridView、DetailsView、FormView等。

注意:作为另一个选项,您也可以先在页面上添加数据Web服务器控件,然后“显示智能标记”,并从“选择数据源”下拉框中选择“新建数据源.”,进入数据源配置向导添加对象数据源。

要指定对象数据源的基础对象并将该对象的方法映射到对象数据源的方法,您可以单击对象数据源智能标记中的“配置数据源”链接进入数据源配置向导。

//files.jb51.net/file_images/article/201604/2016042909362718.png

图3:单击智能标记中的“配置数据源”链接。

这将带您进入数据源配置向导。首先,我们需要为ObjectDataSource指定一个业务对象。如果选中“仅显示数据组件”,下拉框中将仅显示用[数据对象]功能修饰的对象。目前,这个列表应该包括类型化数据集中的TableAdapters和我们在上一篇文章中创建的业务对象。如果您忘记将[DataObject]功能添加到业务逻辑类中,它们将在当前列表中不可见。在这种情况下,您还可以取消选中“仅显示数据组件”来查看所有对象,这些对象可以包括业务对象(以及类型化数据集中的其他类- DataTables、DataRows等)。).

从文件夹上方的下拉列表中选择业务对象产品包,然后单击下一步。

//files.jb51.net/file_images/article/201604/2016042909362719.png

图4:指定了ObjectDataSource控件使用的业务对象。

在下一个屏幕的向导中,您可以选择由ObjectDataSource调用的方法。下拉列表中方法是从前面屏幕中选择的业务对象中获得的。这里我们可以看到GetProductsByProductID、GetProducts、GetProductsByCategoryID和GetProductsBySupplierID的方法。从下拉列表中选择方法GetProducts,然后单击finish(如果您已经如上所示将[DataObjectMethod]功能添加到了ProductBLL的方法中,默认情况下将选择此项)。

//files.jb51.net/file_images/article/201604/2016042909362720.png

图5:从“选择”标签页选择返回数据的方法。

手动配置对象数据源。

对象数据源配置向导提供了一种快速方法来指定它使用的对象,并关联它需要调用的方法。但是,您也可以通过其属性来配置ObjectDataSource,既可以通过属性窗口,也可以直接在声明标记中。只需将TypeName属性设置为所用业务对象的名称,将SelectMethod属性设置为提取数据时要调用的方法的名称。

ASP : ObjectDataSource ID=' objectdata source 1 ' Runat=' Server ' select method=' GetProducts ' Typename=' Products BLL '/ASP : objectdata source虽然您可能更喜欢数据源配置向导,但有时您需要手动配置objectdata source,因为配置向导只列出已开发的类。如果要将ObjectDataSource绑定到。NET框架,比如访问登录用户信息的Membership类,或者管理文件系统信息的Directory类,那么就需要手动设置ObjectDataSource的属性。

步骤:添加一个数据网络服务器控件,并将其绑定到对象数据源。

在将对象数据源添加到页面并进行配置之后,我们可以向页面添加一个数据网络服务器控件,以显示由对象数据源的Select方法返回的数据。的所有数据网站服务器控件都可以绑定到对象数据源;让我们看看如何向GridView、DetailsView和FormView显示对象数据源数据。

将GridView绑定到对象数据源。

从工具箱中添加一个GridView控件到SimpleDisplay.aspx的设计界面.从GridView的智能标记中,选择我们在第一步中添加的ObjectDataSource控件作为数据源。这将根据ObjectDataSource的Select方法返回的数据的每个属性(即类型化数据集Products定义的属性),在GridView控件中自动生成一个BoundField。

//files.jb51.net/file_images/article/201604/2016042909363121.png

图6:向页面添加一个GridView控件,并将其绑定到ObjectDataSource。

//files.jb51.net/file_images/article/201604/2016042909363122.png

图7:通过编辑列对话框管理GridView控件的绑定列。

花一些时间修改GridView控件的绑定列,并删除ProductID、Supplierid、Categoryid、QuantityTyperunit、库存单位、订单单位和订单级别的列。操作非常简单。从左下角的列表中选择这些列,然后单击删除按钮(红色十字)将其删除。然后,重新排列它,选择两个绑定列,CategoryName和SupplierName,并单击向上箭头按钮将它们排列在UnitPrice列之前。分别设置其余绑定列产品、类别、供应商和价格的标题文本属性。然后,将“价格”列格式化为货币将绑定列的HtmlEncode属性设置为False,将DataFormatString属性设置为{0:c}。最后,通过ItemStyle/HorizontalAlign属性,设置绑定列Price的水平右对齐和CheckBox列Discontinued的水平中心显示。

asp: GridView ID=' GridView 1 ' runat=' server ' AutoGenerateColumns=' False ' DataKeyNames=' ProductID ' data sourceid=' objectdata source 1 ' EnableViewState=' F alse ' Columns asp: boundfield data field=' Product name ' header text=' Product ' sort expression=' Product name '/asp: boundfield data field=' CategoryName ' header text=' Category ' ReadOnly=' True ' sort expression

图8: GridView控件的绑定列是自定义的。

使用主题保持显示风格一致。

这里,控件级别的样式设置将被尽可能地删除,而将使用外部文件中定义的级联样式表。“样式. css”文件包含多种CSS样式,如数据网站控件样式、标题样式、行样式和替换样式,可用于指示数据网站服务器控件的外观。为此,我们可以将GridView控件的CssClass属性设置为DataWebControlStyle,类似地设置HeaderStyle、RowStyle和AlternatingRowStyle的CssClass属性。

如果我们将这些CssClass属性设置为Web控件,我们必须记住在我们的手册中清楚地记录每个属性和每个数据Web服务器控件的值。一种更方便的管理方式是使用主题来定义CSS样式与GridView、DetailsView和FormView控件的属性之间的关系。主题是控件级的属性设置、图片和CSS样式的集合,可以应用到整个网站的所有页面,约束外观和感觉。

我们的主题将不包含图片和CSS文件(我们将样式表Styles.css文件留在web应用程序的根目录中),但它将包含两个Skin。外观是包含网站控件默认属性设置的文件。特别是,我们将创建一个皮肤文件来定义GridView和DetailsView的外观,并标记与默认CssClass相关联的属性。

在解决方案资源管理器中选择当前项目,从右键菜单中选择“添加新项”,然后向项目中添加一个外观文件,并将其命名为GridView.skin

//files.jb51.net/file_images/article/201604/2016042909363824.png

图9:添加一个外观文件并命名为GridView.skin

皮肤文件需要放在主题中,主题位于应用主题文件夹中。由于我们还没有这样的文件夹,Visual Studio将在添加我们的第一个皮肤时为我们创建一个。单击是创建应用主题文件夹,并将新的GridView.skin文件放在那里。

外观文件需要放在主题中,而主题文件存储在App_Themes文件夹中。因为我们还没有这个文件夹,当我们添加第一个外观文件时,Visual Studio会好心地提议为我们创建一个。单击“是”自动创建App_Theme文件夹,并将刚刚添加的GridView.skin文件放在那里。

//files.jb51.net/file_images/article/201604/2016042909363825.png

图10:让Visual Studio自动创建App_Theme文件夹。

这将在App_Themes文件夹中自动创建一个主题,该文件夹称为GridView,包含外观文件GridView.skin。

//files.jb51.net/file_images/article/201604/2016042909363826.png

图11:主题GridView已添加到App_Theme文件夹。

将主题GridView重命名为DataWebControls(从GridView文件夹的右键菜单中选择重命名)。然后,输入GridView.skin文件的标签,如下所示:

asp: GridView runat=' server ' CssClass=' DataWebControlStyle ' alternatinglwstyle CSS class=' alternatinglwstyle '/row style CSS class=' row style '/header CSS class=' header style '/ASP :在GridView使用主题DataWebControls之后,这将定义任何页面中任何GridView控件的CSS class相关属性的默认值。让我们为DetailsView控件添加一个又一个外观,我们将很快使用它。为主题DataWebControls添加一个名为DetailsView.skin的外观,并添加以下标签:ASP : detailsview runat=' server ' CSS class=' datawebcontrol style ' alternating wstyle CSS class=' alternating wstyle '/rowstyle CSS class=' row style '/field header style CSS class=' header style '/asp: detailsview关于我们的主题设置,最后一部分是将主题应用到我们的ASP.NET页面。主题可以逐页应用,也可以应用于网站下的所有页面。让我们将主题应用到站下的所有页面。为了实现这一点,在系统中添加以下标签:

pages style sheet theme=' DataWebControls '/

这是顺利完成的!主题样式表中预设的属性不会覆盖直接在控件级别设置的属性。如果希望主题中的设置高于控件的设置,则需要在主题样式表中使用主题功能。遗憾的是,主题功能的设置没有出现在Visual Studio的逻辑视图中。在ASP.NET查找主题和皮肤概述以及使用主题的服务器端风格,了解更多关于主题和外观的信息;有关如何配置页面以使用主题的更多信息,请参见如何:应用ASP.NET主题。

//files.jb51.net/file_images/article/201604/2016042909363927.png

图12: GridView显示了产品的名称、类别、供应商、价格和折扣信息。

在DetailsView控件中一次显示一个数据。

在GridView控件中,从绑定数据源控件返回的数据的每条记录都将显示为一行。然而,有时我们只需要显示一条记录,或者一次只显示一条记录。DetailsView控件提供了这个功能,它被表示为一个两列的HTML表,每行显示一个字段或一个属性。您可以想象DetailsView是一个GridView,其中只有一条数据旋转了90度。

首先,在页面SimpleDisplay.aspx上的GridView控件上方添加一个DetailsView控件.然后,将其绑定到GridView的同一个ObjectDataSourc控件。就像GridView控件一样,它会根据ObjectDataSource的Select方法返回的数据,为每个属性生成一个绑定列。唯一的区别是DetailsView的绑定列是水平排列的。

//files.jb51.net/file_images/article/201604/2016042909363928.png

图13:向页面添加一个DetailsView控件,并将其绑定到ObjectDataSource。

与GridView类似,DetailsView的绑定列也可以进行调整,以提供一些定制的表示。图14显示了一个示例,其中DetailsView控件在设置了绑定列和CssClass属性后看起来像GridView。

//files.jb51.net/file_images/article/201604/2016042909363929.png

图14: DetailsView控件显示一条记录。

请注意,DetailsView控件仅显示其数据源中的第一条记录。为了让用户浏览所有记录,我们必须允许对DetailsView进行分页。要实现这一点,请返回Visual Studio,并在DetailsView的智能标记中选中“启用分页”。

//files.jb51.net/file_images/article/201604/2016042909363930.png

图15:允许分页DetailsView控件。

//files.jb51.net/file_images/article/201604/2016042909364031.png

图16:启用分页后,DetailsView控件允许用户查看任何产品。

我们将在未来的教程中详细讨论分页。

更灵活的布局用于一次显示一条记录。

使用DetailView显示ObjectDataSource返回的每一条数据是相当枯燥的。我们可能需要更灵活的数据表示。例如,在每行显示产品名称、类别、供应商、价格和停产信息的基础上,我们可能需要产品名称和价格列来显示h4的标题,而类别和供应商以较小的字体显示在名称和价格下。此外,我们可能不关心属性名称(产品、类别等)。)显示在属性值之后。

FormView控件提供了这一级别的自定义。在使用字段的基础上(像GridView和DetailsView),FormView控件使用模板,这允许我们混合Web服务器控件、静态HTML和数据绑定语法。如果你熟悉ASP.NET 1 . x中的Repeater控件,你可以认为FormView是一个只显示一条记录的Repeater。

在SimpleDisplay.aspx的设计界面中添加一个FormView控件.首先,FromView控件显示为一个灰色框,告诉我们需要编辑模板内容并使用ItemTemplate。

//files.jb51.net/file_images/article/201604/2016042909364032.png

图17:表单视图必须包含一个项目模板。

您可以通过表单视图的智能标记将数据源控件直接绑定到表单视图,这将自动创建一个默认的项目模板(如果为ObjectDataSource设置了InsertMethod和UpdateMethod,还将同时自动创建EditItemTemplate和InsertItemTemplate)。但是,在这里的示例中,我们将手动绑定FormView并设置它的ItemTemplate。首先将FormView的DataSourceID属性设置为objectdatasource1的id objectdata source:objectdata source 1,然后创建一个ItemTemplate,它以h4显示产品的名称和价格,而类别和供应商则以下面较小的字体显示。

asp3360 formview ID=' formview 1 ' runat=' server ' DataSourceID=' objectdata source 1 ' EnableViewState=' False ' item template H4 % # Eval(' product name ')%(% # Eval(' unit price ',' { 0: c } ')%)/H4 category3360 % # Eval(' CategoryName ')%;供应商: %#评估('供应商名称')%/项目模板/asp:表单视图//files.jb51.net/file_images/article/201604/2016042909364033.png

图18:第一个产品(柴)以预定格式显示。

%# Eval(propertyName)%是绑定语法。Eval方法返回绑定到FormView的对象的指定属性值。有关数据绑定的更多详细信息,请参见Alex Homer在ASP.NET 2.0中的文章简化和扩展数据绑定语法。

与DetailsView一样,FormView显示ObjectDataSource返回的第一条记录。可以启用FormView的分页功能,让访客可以依次查看每个产品。

摘要

借助ASP.NET 2.0的ObjectDataSource控件,我们可以轻松地从业务逻辑层获取和呈现数据,而无需编写一行代码。OjbectDataSource调用指定类的方法并返回结果。结果可以显示在与对象数据源绑定的数据网络服务器控件中。在本节中,我们看到了如何将GridView、DetailsView和FormView控件绑定到ObjectDataSource。

到目前为止,我们只看到了如何使用OjbectDataSource来调用一个没有参数的方法,但是如果我们要调用一个需要传入多个参数的方法,比如ProductBLL类中的getproductbycategoryid(categoryid)方法呢?要调用需要传入一个或多个参数的方法,我们需要配置ObjectDataSource来指定这些参数的值。在下一章中,我们将看看如何实现它。

编程快乐!

作者简介

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

版权声明:在ASP.NET 2.0中操作数据:使用对象数据源显示数据是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。