学习 Web Forms
  • 爱学习公众号

    关注爱学习公众号

  • 扫码手机阅读更方便

推荐阅读
  • ASP.NET AJAX AlwaysVisible 控件扩展程序

    本文内容 作者: Joe Stagner了解将页面元素定位到屏幕上的某个位置是多么容易,无论用户可以滚动查看文档的距离如何,都始终可见。 浮动页面元素可以是从静态文本到基于 AJAX 的上下文感知帮助框的任何内容。▶观看视频(6分钟)上一页下一页

  • 安全基础知识和 ASP.NET 支持 (C#)

    这是一系列教程中的第一个教程,这些教程将探讨通过 web 窗体验证访问者、授权访问特定页面和功能以及管理 ASP.NET 应用程序中的用户帐户的方法。

  • 显示数据 Web 控件中的二进制数据 (C#)

    在本教程中,我们将介绍用于在网页上显示二进制数据的选项,包括图像文件的显示以及 PDF 文件的 "下载" 链接。

  • 批量删除 (C#)

    了解如何在一个操作中删除多个数据库记录。 在上一教程中创建的增强 GridView 的用户界面层中。 在数据访问层中,我们将多个删除操作打包到一个事务中,以确保所有删除操作成功或回滚所有删除操作。

  • 使用 CascadingDropDown 填充列表 (C#)

    AJAX 控件工具包中的 CascadingDropDown 控件扩展了 DropDownList 控件,以便其中一个 DropDownList 中的更改加载另一个 DropDownList 中的关联值。 (例如,一个列表提供美国省/市/自治区列表,然后使用该州的主要城市填充下一个列表。)首先要解决的问题是,使用此控件实际填写下拉列表。

  • 通过 ModalPopup 处理回发 (VB)

    AJAX 控件工具包中的 ModalPopup 控件提供了使用客户端方法创建模式弹出窗口的简单方法。 从弹出窗口中创建回发时,必须特别小心。

  • 对 UpdatePanel 控件 执行动画处理 (C#)

    ASP.NET AJAX 控件工具包中的动画控件不仅仅是一个控件,而是用于向控件添加动画的整个框架。 对于 UpdatePanel 的内容,存在大量依赖于动画框架的特殊扩展器: UpdatePanelAnimation。 本教程演示如何为 UpdatePanel 设置此类动画。

  • 在 ASP.NET 动态数据应用程序中使用属性验证

    本文内容 作者: Joe Stagner此视频介绍如何修改动态数据应用程序的数据访问层中的分部类,并通过将焦点放在验证特性上来开始使用特性。 此数据访问层验证比用户界面层上的验证更好,而且与 ASP.NET 动态数据的操作非常简单。▶观看视频(11分钟)

  • MutuallyExclusiveCheckbox

    本教程介绍如何使用 MutuallyExclusiveCheckbox 控件创建与单选按钮(互相排斥)类似的复选框,但可以完全清除。

  • Entity Framework 4.0 的新增功能

    本教程系列在使用实体框架教程系列的入门创建的 Contoso 大学 web 应用程序上构建。 如果你没有完成前面的教程,作为本教程的起点,你可以下载你要创建的应用程序。 你还可以下载完整的系列教程创建的应用程序。 如果有关于这些教程的问题,可以将其发布到ASP.NET 实体框架论坛。

使用 ObjectDataSource 显示数据 (VB)

作者: Scott Mitchell

下载示例应用下载 PDF

本教程将使用此控件查看 ObjectDataSource 控件,可以绑定从上一教程中创建的 BLL 检索的数据,而无需编写代码行!

简介

随着应用程序体系结构和网站页面布局的完成,我们已准备好开始探索如何完成各种常见的数据和与报表相关的任务。 在前面的教程中,我们已了解如何以编程方式将来自 DAL 和 BLL 的数据绑定到 ASP.NET 页中的数据 Web 控件。 此语法将数据 Web 控件的 DataSource 属性分配给要显示的数据,然后调用该控件的 DataBind() 方法是 ASP.NET 1.x 应用程序中使用的模式,可以继续在2.0 应用程序中使用。 但是,ASP.NET 2.0 的新数据源控件提供了一种用于处理数据的声明性方式。 使用这些控件,可以绑定从上一教程中创建的 BLL 检索的数据,而无需编写代码行!

ASP.NET 2.0 随附了五个内置数据源控件SqlDataSourceAccessDataSourceObjectDataSourceXmlDataSourceSiteMapDataSource ,不过,如果需要,你可以构建自己的自定义数据源控件 由于我们已开发了一个适用于我们的教程应用程序的体系结构,我们将针对 BLL 类使用 ObjectDataSource。

ASP.NET 2.0 包括五个内置数据源控件

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

ObjectDataSource 充当用于处理其他某个对象的代理。 若要配置 ObjectDataSource,我们需要指定此基础对象,以及其方法是如何映射到 ObjectDataSource 的 SelectInsertUpdateDelete 方法。 指定此基础对象并将其方法映射到 ObjectDataSource 后,接下来我们可以将该 ObjectDataSource 绑定到数据 Web 控件。 ASP.NET 附带了许多数据 Web 控件,其中包括 GridView、DetailsView、RadioButtonList 和 DropDownList 等。 在页生命周期内,数据 Web 控件可能需要访问它所绑定到的数据,这将通过调用其 ObjectDataSource 的 Select 方法来实现;如果数据 Web 控件支持插入、更新或删除,则可以对其 ObjectDataSource 的 InsertUpdateDelete 方法进行调用。 然后,ObjectDataSource 将这些调用路由到相应的基础对象的方法,如下图所示。

ObjectDataSource 充当代理

图 2: ObjectDataSource 充当代理(单击以查看完全大小的映像

尽管可以使用 ObjectDataSource 来调用用于插入、更新或删除数据的方法,但我们只需专注于返回数据;将来的教程将探讨如何使用用于修改数据的 ObjectDataSource 和数据 Web 控件。

步骤1:添加和配置 ObjectDataSource 控件

首先打开 BasicReporting 文件夹中的 "SimpleDisplay.aspx" 页,切换到设计视图,然后将 "ObjectDataSource" 控件从 "工具箱" 拖动到页面的设计图面上。 ObjectDataSource 在设计图面上显示为灰色框,因为它不生成任何标记;它只是通过从指定的对象调用方法来访问数据。 ObjectDataSource 返回的数据可以通过数据 Web 控件显示,例如 GridView、DetailsView、FormView 等。

Note

或者,您可以首先将数据 Web 控件添加到页面,然后从其智能标记中,从下拉列表中选择 "<新建数据源>" 选项。

若要指定 ObjectDataSource 的基础对象以及该对象的方法映射到 ObjectDataSource 的方式,请单击该 ObjectDataSource 的智能标记中的 "配置数据源" 链接。

单击智能标记中的 "配置数据源" 链接

图 3:从智能标记中单击 "配置数据源" 链接(单击以查看完全大小的图像

此时将打开 "配置数据源" 向导。 首先,必须指定 ObjectDataSource 要使用的对象。 如果选中了 "仅显示数据组件" 复选框,则此屏幕上的下拉列表将仅列出已使用 DataObject 特性修饰的对象。 目前,我们的列表包含在上一教程中创建的类型化数据集和 BLL 类中的 Tableadapter。 如果忘记将 DataObject 特性添加到业务逻辑层类,则不会在此列表中看到它们。 在这种情况下,取消选中 "仅显示数据组件" 复选框,以查看所有对象,这些对象应包括 BLL 类(以及数据表、Datarow 等的类型化数据集中的其他类)。

在第一个屏幕中,从下拉列表中选择 ProductsBLL 类,然后单击 "下一步"。

指定要用于 ObjectDataSource 控件的对象

图 4:指定要用于 ObjectDataSource 控件的对象(单击以查看完全大小的图像

向导中的下一个屏幕提示您选择 ObjectDataSource 应调用的方法。 下拉列表列出了返回从上一屏幕中选择的对象中的数据的方法。 在这里,我们将看到 GetProductByProductIDGetProductsGetProductsByCategoryIDGetProductsBySupplierID 从下拉列表中选择 GetProducts 方法,然后单击 "完成" (如果已将 DataObjectMethodAttribute 添加到 ProductBLL的方法(如前面的教程中所示),则默认情况下将选中此选项。

从 "选择" 选项卡中选择返回数据的方法

图 5:从 "选择" 选项卡中选择返回数据的方法(单击查看完全大小的图像

手动配置 ObjectDataSource

ObjectDataSource 的 "配置数据源" 向导提供了一种快速方法来指定它使用的对象,并将调用对象的哪些方法关联起来。 但是,可以通过属性窗口或直接在声明性标记中,通过其属性配置 ObjectDataSource。 只需将 TypeName 属性设置为要使用的基础对象的类型,并将 SelectMethod 设置为在检索数据时要调用的方法。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetProducts" TypeName="ProductsBLL">
</asp:ObjectDataSource>

即使您更喜欢 "配置数据源" 向导,有时也可能需要手动配置 ObjectDataSource,因为向导仅列出开发人员创建的类。 如果要将 ObjectDataSource 绑定到 .NET Framework (例如成员身份类)中的类,若要访问用户帐户信息或目录类以使用文件系统信息,则需要手动设置 ObjectDataSource 的属性。

步骤2:添加数据 Web 控件并将其绑定到 ObjectDataSource

一旦将 ObjectDataSource 添加到页面并进行了配置,就可以将数据 Web 控件添加到页面,以显示由 ObjectDataSource 的 Select 方法返回的数据。 任何数据 Web 控件都可以绑定到 ObjectDataSource;让我们看看如何在 GridView、DetailsView 和 FormView 中显示 ObjectDataSource 的数据。

将 GridView 绑定到 ObjectDataSource

将工具箱中的 GridView 控件添加到 SimpleDisplay.aspx的设计图面。 从 GridView 的智能标记中,选择在步骤1中添加的 ObjectDataSource 控件。 这会自动为 ObjectDataSource Select 方法(即 Products DataTable 定义的属性)中的数据返回的每个属性创建 BoundField。

已将 GridView 添加到页面并绑定到 ObjectDataSource

图 6:已将 GridView 添加到页面并绑定到 ObjectDataSource (单击以查看完全大小的图像

然后,可以通过从智能标记中单击 "编辑列" 选项来自定义、重新排列或删除 GridView 的 BoundFields。

通过 "编辑列" 对话框管理 GridView 的 BoundFields

图 7:通过 "编辑列" 对话框管理 GridView 的 BoundFields (单击以查看完全大小的图像

花点时间修改 GridView 的 BoundFields,删除 ProductIDSupplierIDCategoryIDQuantityPerUnitUnitsInStockUnitsOnOrderReorderLevel BoundFields。 只需从左下方的列表中选择 "BoundField",然后单击 "删除" 按钮(红色 X)即可将其删除。 接下来,重新排列 BoundFields,以便 CategoryNameSupplierName BoundFields 在 UnitPrice BoundField 之前,选择这些 BoundFields 并单击向上箭头。 将剩余 BoundFields 的 HeaderText 属性分别设置为 "Products"、"Category"、"Supplier" 和 "Price"。 接下来,通过将 BoundField 的 HtmlEncode 属性设置为 False,将 Price BoundField 的格式设置为 "False",并将其 DataFormatString 属性设置为 "{0:c}"。 最后,在水平方向上将 Price 向右对齐,并通过 ItemStyle/HorizontalAlign 属性将中心 Discontinued 复选框水平对齐。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="ProductID" DataSourceID="ObjectDataSource1"
    EnableViewState="False">
    <Columns>
        <asp:BoundField DataField="ProductName"
          HeaderText="Product" SortExpression="ProductName" />
        <asp:BoundField DataField="CategoryName"
          HeaderText="Category" ReadOnly="True"
          SortExpression="CategoryName" />
        <asp:BoundField DataField="SupplierName"
          HeaderText="Supplier" ReadOnly="True"
          SortExpression="SupplierName" />
        <asp:BoundField DataField="UnitPrice"
          DataFormatString="{0:c}" HeaderText="Price"
            HtmlEncode="False" SortExpression="UnitPrice">
            <ItemStyle HorizontalAlign="Right" />
        </asp:BoundField>
        <asp:CheckBoxField DataField="Discontinued"
          HeaderText="Discontinued" SortExpression="Discontinued">
            <ItemStyle HorizontalAlign="Center" />
        </asp:CheckBoxField>
    </Columns>
</asp:GridView>

已自定义 GridView BoundFields

图 8:已经自定义了 GridView 的 BoundFields (单击查看完全大小的图像

使用主题实现一致的外观

这些教程尽力删除任何控件级样式设置,而不是尽可能使用外部文件中定义的级联样式表。 Styles.css 文件包含 DataWebControlStyleHeaderStyleRowStyleAlternatingRowStyle CSS 类,它们应该用于决定这些教程中所使用的数据 Web 控件的外观。 为实现此目的,我们可以将 GridView 的 CssClass 属性设置为 DataWebControlStyle,并相应地设置其 HeaderStyleRowStyleAlternatingRowStyle 属性。CssClass

如果在 Web 控件中设置这些 CssClass 属性,我们需要记得为每个已添加到教程中的数据 Web 控件显式设置这些属性值。 更易于管理的方法是使用主题为 GridView、DetailsView 和 FormView 控件定义默认的与 CSS 相关的属性。 主题是可应用于站点中的页面以强制使用常见外观的控件级属性设置、图像和 CSS 类的集合。

本主题不包括任何图像或 CSS 文件(我们会在 web 应用程序的根文件夹中按原样 Styles.css 原样保留样式表,但将包括两个外观。 外观是一个文件,用于定义 Web 控件的默认属性。 具体而言,我们将有一个用于 GridView 和 DetailsView 控件的外观文件,用于指示默认 CssClass相关的属性。

首先,在解决方案资源管理器中右键单击项目名称,然后选择 "添加新项",以将新的外观文件添加到名为 GridView.skin 的项目。

添加名为 GridView 的外观文件

图 9:添加一个名为 GridView.skin 的外观文件(单击以查看完全大小的图像

外观文件需要放在位于 App_Themes 文件夹中的主题中。 由于我们还没有这样一个文件夹,因此,在添加第一个外观时,Visual Studio 将为我们创建一个。 单击 "是" 以创建 App_Theme 文件夹,然后将新的 GridView.skin 文件放在此处。

让 Visual Studio 创建 App_Theme 文件夹

图 10:让 Visual Studio 创建 App_Theme 文件夹(单击查看完全大小的图像

这会在名为 GridView 的 App_Themes 文件夹中创建一个新主题,并 GridView.skin外观文件。

GridView 主题已添加到 App_Theme 文件夹

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

将 GridView 主题重命名为 "DataWebControls" (右键单击 App_Theme 文件夹中的 GridView 文件夹,然后选择 "重命名")。 接下来,将以下标记输入到 GridView.skin 文件中:

<asp:GridView runat="server" CssClass="DataWebControlStyle">
   <AlternatingRowStyle CssClass="AlternatingRowStyle" />
   <RowStyle CssClass="RowStyle" />
   <HeaderStyle CssClass="HeaderStyle" />
</asp:GridView>

这将为任何使用 DataWebControls 主题的页面中的任何 GridView 定义与 CssClass相关的属性的默认属性。 接下来,我们将为 DetailsView 添加另一个外观,这是我们稍后将使用的数据 Web 控件。 将新外观添加到名为 DetailsView.skin 的 DataWebControls 主题,并添加以下标记:

<asp:DetailsView runat="server" CssClass="DataWebControlStyle">
   <AlternatingRowStyle CssClass="AlternatingRowStyle" />
   <RowStyle CssClass="RowStyle" />
   <FieldHeaderStyle CssClass="HeaderStyle" />
</asp:DetailsView>

定义主题后,最后一步是将主题应用于我们的 ASP.NET 页面。 主题可以逐页应用,也可以针对网站中的所有页面应用。 让我们为网站中的所有页面使用此主题。 若要实现此目的,请将以下标记添加到 Web.config<system.web> 部分:

<pages styleSheetTheme="DataWebControls" />

就这么简单! styleSheetTheme 设置指示主题中指定的属性应重写在控件级别指定的属性。 若要指定主题设置应王牌控制设置,请使用 theme 特性代替 styleSheetTheme;遗憾的是,主题设置不会出现在 Visual Studio 设计视图中。 有关主题和外观的详细信息,请参阅ASP.NET 主题和外观概述服务器端样式。有关将页配置为使用主题的详细信息,请参阅如何:应用 ASP.NET 主题

GridView 显示产品的名称、类别、供应商、价格和废止信息

图 12: GridView 显示产品的名称、类别、供应商、价格和废止信息(单击查看全尺寸图像

在 DetailsView 中一次显示一条记录

GridView 为其绑定的数据源控件返回的每个记录显示一行。 但有时,我们可能希望一次只显示一个记录或一条记录。 DetailsView 控件提供此功能,呈现为 HTML <table>,其中包含两列,每个绑定到控件的列或属性占一行。 您可以将 DetailsView 看作是一条记录旋转了90度的 GridView。

首先在 SimpleDisplay.aspx中的 GridView上方添加一个 DetailsView 控件。 接下来,将其绑定到作为 GridView 的相同 ObjectDataSource 控件。 与 GridView 一样,对于由 ObjectDataSource Select 方法返回的对象中的每个属性,都将向 DetailsView 添加一个 BoundField。 唯一的区别是,DetailsView 的 BoundFields 水平布局,而不是垂直布局。

向页面添加 DetailsView 并将其绑定到 ObjectDataSource

图 13:将 DetailsView 添加到页面并将其绑定到 ObjectDataSource (单击以查看完全大小的映像

与 GridView 一样,DetailsView 的 BoundFields 可以调整,以提供对 ObjectDataSource 返回的数据的更自定义显示。 图14显示了在其 BoundFields 和 CssClass 属性已配置为使其外观类似于 GridView 示例后的 DetailsView。

DetailsView 显示单个记录

图 14: DetailsView 显示单个记录(单击查看完全大小的图像

请注意,DetailsView 只显示其数据源返回的第一条记录。 若要允许用户单步执行所有记录,必须为 DetailsView 启用分页。 为此,请返回到 Visual Studio 并选中 DetailsView 的智能标记中的 "启用分页" 复选框。

在 DetailsView 控件中启用分页

图 15:在 DetailsView 控件中启用分页(单击以查看完全大小的图像

启用了分页,DetailsView 允许用户查看任何产品

图 16:启用分页后,DetailsView 允许用户查看任何产品(单击查看完全尺寸的图像

在将来的教程中,我们将详细介绍分页。

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

DetailsView 在显示从 ObjectDataSource 返回的每条记录的方式上非常严格。 我们可能需要更灵活的数据视图。 例如,我们可能需要在一个 <h4> 标题中显示产品名称和价格,而不是在单独的行中显示产品名称、类别、供应商、价格和废止信息,而是以较小字体大小显示在名称和价格下面的类别和供应商信息。 我们可能不介意在值旁显示属性名称(产品、类别等)。

FormView 控件可提供此级别的自定义。 FormView 使用模板,这些模板允许混合使用 Web 控件、静态 HTML 和数据绑定语法,而不是使用字段(如 GridView 和 DetailsView 这样做)。 如果你熟悉 ASP.NET 1.x 中的中继器控件,可以将 FormView 视为用于显示单个记录的中继器。

将 FormView 控件添加到 SimpleDisplay.aspx 页面的设计图面。 最初,FormView 以灰色块显示,告知我们需要至少提供控件的 ItemTemplate

FormView 必须包含 ItemTemplate

图 17: FormView 必须包含 ItemTemplate单击查看完全大小的图像

您可以通过 FormView 的智能标记将 FormView 直接绑定到数据源控件,这将自动创建默认 ItemTemplate (连同 EditItemTemplateInsertItemTemplate,如果 ObjectDataSource 控件的 InsertMethodUpdateMethod 属性已设置)。 但是,在此示例中,我们将数据绑定到 FormView,并手动指定其 ItemTemplate 首先将 FormView 的 DataSourceID 属性设置为 ObjectDataSource 控件的 IDObjectDataSource1 接下来,创建 ItemTemplate,使其在 <h4> 元素中显示产品的名称和价格,并将其下的类别和货主名称显示为较小的字号。

<asp:FormView ID="FormView1" runat="server"
    DataSourceID="ObjectDataSource1" EnableViewState="False">
    <ItemTemplate>
        <h4><%# Eval("ProductName") %>
          (<%# Eval("UnitPrice", "{0:c}") %>)</h4>
        Category: <%# Eval("CategoryName") %>;
        Supplier: <%# Eval("SupplierName") %>
    </ItemTemplate>
</asp:FormView>

第一个产品(Chai)以自定义格式显示

图 18:第一个产品(Chai)以自定义格式显示(单击以查看完全大小的图像

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

与 DetailsView 一样,FormView 只显示从 ObjectDataSource 返回的第一条记录。 可以在 FormView 中启用分页,以允许访问者一次单步执行一次产品。

摘要

无需编写代码,就可以在不编写代码的情况下,访问和显示业务逻辑层中的数据,而无需编写代码。 ObjectDataSource 调用类的指定方法并返回结果。 这些结果可以显示在绑定到 ObjectDataSource 的数据 Web 控件中。 在本教程中,我们将介绍如何将 GridView、DetailsView 和 FormView 控件绑定到 ObjectDataSource。

到目前为止,我们仅了解了如何使用 ObjectDataSource 调用无参数的方法,但如果我们想要调用需要输入参数的方法(如 ProductBLL 类的 GetProductsByCategoryID(categoryID)),该怎么办? 为了调用需要一个或多个参数的方法,必须将 ObjectDataSource 配置为指定这些参数的值。 我们将在下一教程中了解如何实现此目的。

很高兴编程!

其他阅读材料

有关本教程中讨论的主题的详细信息,请参阅以下资源:

关于作者

Scott Mitchell,创始人的4GuysFromRolla.com,已在使用 Microsoft Web 技术,自1998开始。 Scott 的工作方式是独立的顾问、培训师和撰稿人。 他的最新书籍是,在24小时内,sam ASP.NET 2.0 可以mitchell@4GuysFromRolla.com访问。 或通过他的博客,可以在http://ScottOnWriting.NET找到。

特别感谢

此教程系列由许多有用的审阅者查看。 本教程的主管审查人员是 Hilton Giesenow。 想要查看我即将发布的 MSDN 文章? 如果是这样,请在mitchell@4GuysFromRolla.com放置一行

关于我们 免责声明 联系我们
Copyright © 2021 爱学习网 浙ICP备18049359号 网站地图 Google地图