一步一步学会在ASP.NET 4数据绑定控件中启用动态数据(翻译) - longgel -...

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:04:24

一步一步学会在ASP.NET 4数据绑定控件中启用动态数据(翻译)

连续一个星期翻译了好几篇在MSDN上本人学习的相关内容,我也能希望将所有的asp.net 4中的一些新特性的使用方法学会,然后同时也尽早的翻译给大家,因为我现在也还没看到MSDN这方面的中文文档。

源码下载 (包含VB和C#)

创建 ASP.NET Web 应用程序并添加数据模型


创建 ASP.NET Web 应用程序
  1. 启动 Visual Studio。

  2. 在“File”菜单中单击“New”,再单击“Project”。

    将显示“New Project”对话框。

  3. 在“Installed Templates”下的左侧窗格中,选择“Visual C#”,然后选择“Web”。

  4. 在“Installed Templates”下,选择“ASP.NET Web 应用程序”。

  5. 在“Location”框中输入要保存 Web 应用程序的文件夹的名称。例如,输入文件夹名称“C:\WebApplications\EnableDynamicData”。

  6. 单击“OK”。

下一步是添加数据库。

向 Web 应用程序中添加数据库
  1. 在“Solution Explorer”中,右击 App_Data 文件夹,然后单击“Add Exiting”。

  2. 在“Add Exiting”对话框中,输入 AdventureWorksLT 数据库文件 (AdventureWorksLT.mdf) 的存储位置,然后单击“Add”。

您现在可以创建一个数据模型,其中包含表示数据库表的类。动态数据使用这些类来实现与数据库的交互。在本演练中,您将使用 LINQ-to-SQL 数据模型。但是,可以改用 ADO.NET Entity Framework 数据模型。(您还可以在不使用任何数据模型的情况下手动创建这些类,但是本次演示中不显示这种情况。)

创建数据模型
  1. 在“Solution Explorer”中右击项目名称,然后单击“Add”。

  2. 单击“New Item”。

  3. 在“Installed Templates”下的左侧窗格中,选择“Data”。

  4. 在中间窗格中,单击“LINQ to SQL Classes”。

  5. 在“Name”框中,输入数据库模型的名称 AdventureWorksLT.dbml。

  6. 单击“Add”。

    此时将显示“对象关系设计器”。有关更多信息,请参见对象关系设计器(O/R 设计器)

  7. 在对象关系设计器(Object Relational Designer)中,单击“Server Explorer”链接。

  8. 在“Server Explorer”中,在“Data Connections”下面,展开“AdventureWorksLT_Data.mdf”节点,然后展开“Tables”节点。

  9. 选择所有表并将其拖到对象关系设计器窗口中。

  10. 在显示的关系图中,选择 SalesOrdersDetail 表的所有列。

  11. 在相关的“Properties”窗口中,将“更新检查”属性设置为“Never”。

  12. 关闭“Server Explorer”。

  13. 保存并关闭 AdventureWorksLT.dbml 文件。

    您已经创建了一个表示 AdventureWorksLT 数据库的数据模型。

创建自定义逻辑以访问指定表


下一步是创建能让应用程序访问并处理数据库信息的代码。(在动态数据 Web 应用程序中,将会自动生成此逻辑。但本演练演示如何创建此代码以用于 ObjectDataSource控件。)对于本演练,自定义逻辑由一些方法组成,这些方法列出并修改 SalesOrderDetail 表中包含的数据字段。

创建自定义逻辑以访问指定表
  1. 在“Solution Explorer”中右击项目名称,然后单击“Add”。

  2. 单击“New Item”。

  3. 在“Installed Templates”下的左侧窗格中,单击“Code”。

  4. 在中心窗格中,单击“Code File”。

  5. 在“Name”框中输入ProcessingOrderDetails.cs,然后单击“Add”。

  6. 将下面的代码复制到新类中,这样会替换文件中的所有已有代码。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace EnableDynamicData
    {
      public class ProcessingOrderDetails
      {
        public IEnumerable GetSalesOrderDetails()
        {
          using (AdventureWorksLTDataContext db = 
             new AdventureWorksLTDataContext())
          {
            return db.SalesOrderDetails.ToList();
           }
        }

        public void Update(SalesOrderDetail p)
        {
          using (AdventureWorksLTDataContext db = 
            new AdventureWorksLTDataContext())
            {
              db.SalesOrderDetails.Attach(p, true);
              db.SubmitChanges();
            }
        }
      }
    }


     

    该类包含下列方法:GetSalesOrderDetails.该方法返回 SalesOrderDetail 表中的数据行。该方法实例化数据库上下文对象,然后使用 SalesOrderDetails 类来获取行的集合。

    Update.该方法更改 SalesOrderDetail 表中的列值。该方法实例化数据库上下文对象,然后将 SalesOrderDetail 表中的更改提交到数据库。

  7. 保存并关闭文件。

  8. 从“Build”菜单中,单击生成 EnableDynamicData(或者用于 Web 应用程序的名称)以生成解决方案。

    这样会使业务对象可用于下一个过程。

对数据绑定控件启用动态数据


本部分演示如何配置动态绑定控件,以使它可以使用页模板和验证等从数据库架构或从自定义元数据中推断的功能。您的应用程序仅需启用动态数据即可使用这些功能。该控件用于显示和更改 SalesOrderDetail 表中包含的值。

第一步是配置数据源控件,用以与数据库交互。

添加网页和数据源控件
  1. 在“Solution Explorer”中右击项目名称,然后单击“Add”。

  2. 单击“new Item”。

  3. 在“已安装的模板”下的左侧窗格中,单击“Web”。

  4. 在中心窗格中,单击“Web Form”。

  5. 在“Name”框中,输入 EnableDynamicData.aspx,然后单击“添加”。

  6. 切换到“Design”视图。

  7. 从“toolbox”的“data”组中,将一个ObjectDataSource 控件添加到该页上。

  8. 在“ObjectDataSource Tasks”菜单上,单击“Configure Data Source”。

    此时将显示“Choose a Business Object”对话框。

  9. 在“Choose your Business Object”列表中,选择您在前一过程中创建的 ProcessingOrderDetails 类。

  10. 单击“Next”。

    将显示“Define Data Methods”对话框。

  11. 在“Choose a method”选项卡窗格的“Select”列表中,选择 GetSalesOrderDetails 方法。

  12. 单击“Update”选项卡。

  13. 在“Update”选项卡窗格的“Choose a method”列表中,选择 Update 方法。

  14. 单击“finish”。

    您已经将数据源控件配置为使用 ProcessingOrderDetails 类来通过数据模型与数据库交互。

下一步是创建数据绑定控件并对其启用动态数据。然后,该控件可以依赖于动态数据功能来创建用于显示和编辑数据的 UI。

配置数据绑定控件以启用动态数据功能
  1. 从“Toolbox”的“Data”组中,将一个 GridView 控件添加到该页上。

  2. 在“GridView Tasks”菜单的“Choose Data Source”列表中,选择 ObjectDataSource1。

    这是您在前一过程中创建的 ObjectDataSource 控件的 ID。

  3. 启用paging、editing和selection。

  4. 切换到“Source”视图。

  5. 在 GridView 控件的 Columns 元素中,删除所有自动生成的 DataBoundField 控件。(保留 CommandField 元素。)

  6. 通过将 AutoGenerateColumns 特性设置为 true 启用列的自动生成功能,如下面的示例所示:

      DataSourceID="ObjectDataSource1" AutoGenerateColumns="True" >
        
                  ShowEditButton="True" ShowSelectButton="True" /> 
        

  7. 保存并关闭 EnableDynamicData.aspx 文件。

  8. 打开EnableDynamicData.aspx.cs 类文件。

  9. 添加对 System.Web.DynamicData 命名空间的引用,如下面的示例所示:

    using System.Web.DynamicData
  10. 在 Page_Init 方法中对 GridView 控件启用动态数据,如下面的示例所示:

protected void Page_Init()
  {
    GridView1.EnableDynamicData(typeof(SalesOrderDetail));
  }
  1. 保存并关闭文件。

  2. 重新生成应用程序。

测试动态数据功能


本节演示如何通过验证以下内容来测试动态数据功能是否已集成到 GridView 控件中:

  • 该自定义业务逻辑与数据库正确交互。

  • 对数据字段的更改进行动态数据验证。

  • 动态数据生成错误消息,这些错误消息基于动态数据从数据库架构元数据中推断的信息。

测试动态数据功能
  1. 在“Solution Explorer”中,右击 EnableDynamicData.aspx 页,然后单击“在浏览器中查看”。

    浏览器中显示一个页面,其中显示 SalesOrderDetail 表。

  2. 验证显示的 SalesOrderDetails 数据字段是否正确。

  3. 在任意行上单击“Edit”,为 UnitPrice 列输入一个非数字值。

  4. 在同一行上,单击“Update”。

    动态数据将显示一条错误消息,警告您 UnitPrice 字段必须为十进制值。请注意,用于编辑的 UI 基于动态数据默认模板。

  5. 在同一行上,单击“Cancel”。

  6. 在任意行上单击“Edit”,然后将 OrderQty 列更改为一个小于或等于数据库允许的最大整数 (32767) 的值。

  7. 在同一行上,单击“Update”。

    动态数据将更新该数据库。由于您输入的值有效,数据会通过动态数据验证。

  8. 在任意行上单击“Edit”,然后将 OrderQty 列更改为一个大于数据库允许的最大整数 (32767) 的值。

  9. 在同一行上,单击“Update”。

    动态数据会显示一条错误消息,指出您输入了无效的值。

  10. 在同一行上,单击“Cancel”。

    这表明动态数据功能已集成到 GridView 控件中,而且它使用从数据库架构中获得的元数据信息。验证是应用程序从动态数据中继承的功能的一部分。

  11. 关闭浏览器。

添加自定义数据信息


在本部分演练中,您会向数据库架构中添加自定义信息(元数据)。动态数据在处理数据字段时使用该元数据。例如,您可以为数据库允许的数据字段以外的数据字段定义值范围。在本演练中,您将添加自定义信息以要求 UnitPrice 值(对数据库来说不是必需字段)并设置 OrderQty 值的范围。

提供自定义元数据
  1. 在“Solution Explorer”中,右击项目名称,然后选择“Add Refereence”。

    即会显示“Add Reference”对话框。

  2. 单击“.NET”选项卡。

  3. 从列表中选择 System.ComponentModel.DataAnnotations。

  4. 单击“OK”。

  5. 打开EnableDynamicData.aspx.cs 文件。

  6. 将下面的代码复制到该文件中,这样会替换文件中的所有已有代码。


    using System.ComponentModel.DataAnnotations;

    namespace EnableDynamicData
    {
      [MetadataType(typeof(SalesOrderDetailMetadata))]
      public partial class SalesOrderDetail
      {
        public class SalesOrderDetailMetadata
        {
          [Required]
          public string UnitPrice { get; set; }

          [Range(0, 100)]
          public decimal OrderQty { get; set; }

        }
      }
    }


    此代码创建两个类:名为 SalesOrderDetail 的分部类及其内部的名为 SalesOrderDetailMetadata 的类。

    这些类扩展数据模型,能让您执行以下任务:

    • 向 UnitPrice 数据字段中添加元数据以防止出现空值。(AdventureWorks 数据库允许 UnitPrice 数据字段为空值。)当用户尝试输入空值时,动态数据将发出错误消息。

    • 向 OrderQty 数据字段中添加元数据以设置允许的范围。AdventureWorks 数据库对 OrderQty 数据字段没有范围限制。当用户尝试输入超出允许范围的值时,动态数据将发出错误消息。

    以这种方式使用分部类可提供一种灵活的方式来修改数据模型的行为,而不必直接更改数据模型。

  7. 保存并关闭文件。

测试自定义动态数据验证


本部分演示如何测试动态数据是否根据您提供的元数据执行验证。您将测试以下内容:

  • 动态数据根据自定义元数据对数据字段的更改进行正确验证。

  • 动态数据根据从自定义元数据信息中推断的信息来生成错误消息。

测试自定义动态数据验证
  1. 在“Solution Explorer”中,右击 EnableDynamicData.aspx 页,然后选择“View in Browser”。

    浏览器中显示一个页面,其中显示 SalesOrderDetails 表。

  2. 在任一行上,单击“Edit”并清除 UnitPrice 列值。

  3. 在同一行上,单击“Update”。

    动态数据将显示一条错误消息,警告您 UnitPrice 字段是必需的。这表明动态数据验证已集成到 GridView 控件中,而且它使用您提供的自定义元数据信息。

  4. 在同一行上,单击“Cancel”。

  5. 在任意行上单击“Edit”,然后将 OrderQty 列更改为允许范围内的值,如 25。

  6. 在同一行上,单击“Update”。

    动态数据将更新该数据库。由于您输入的值有效,数据会通过验证。

  7. 在任意行上单击“Edit”,然后将 OrderQty 列更改为允许范围外的值,如 250。

  8. 在同一行上,单击“Update”。

    动态数据将显示一条错误消息,指出数据字段值必须介于 0 和 100 之间。这表明已经使用自定义元数据信息,将动态数据验证集成到 GridView 控件中。

  9. 在同一行上,单击“Cancel”。