演练:到自定义业务对象的数据绑定
更新:2007 年 11 月
许多 Web 应用程序是使用多个层生成的,由中间层中的一个或多个组件提供数据访问。Microsoft Visual Web Developer 提供了一个向导,该向导可以帮助创建可用作中间层数据对象的数据组件(如演练:具有 Visual Studio 数据组件的数据绑定网页中所述)。
但是,您可能还希望生成自定义业务对象,而不是依赖于通过该向导创建的数据组件。通过创建自定义业务对象可以实现自己的业务逻辑。本演练演示如何创建可用作 ASP.NET 网页的数据源的基本业务对象。
通过此演练,您将学会如何执行以下任务:
创建可以将数据返回到网页的组件。该组件的数据使用的是 XML 文件。
在网页上引用业务对象作为数据源。
将控件绑定到业务对象返回的数据。
使用业务对象读写数据。
先决条件
若要完成本演练,您需要:
Visual Web Developer (Visual Studio)。
.NET Framework。
本演练假定您对如何使用 Visual Web Developer 已有了大致的了解。
创建网站
如果已在 Visual Web Developer 中创建了一个网站(例如,按照演练:在 Visual Web Developer 中创建基本网页中的步骤),则可以使用该网站并转到下一节“为业务数据创建 XML 文件”。否则,按照下面的步骤创建一个新的网站和网页。
创建文件系统网站
打开 Visual Web Developer。
在**“文件”菜单上单击“新建网站”**。
出现**“新建网站”**对话框。
在**“Visual Studio 已安装的模板”之下单击“ASP.NET 网站”**。
在**“位置”**框中输入要保存网站页面的文件夹的名称。
例如,键入文件夹名“C:\WebSites”。
在**“语言”**列表中,单击您想使用的编程语言。
单击**“确定”**。
Visual Web Developer 创建该文件夹和一个名为 Default.aspx 的新页。
为业务数据创建 XML 文件
在下面的过程中,将为业务组件数据创建一个简单的 XML 文件。
创建 XML 文件
在解决方案资源管理器中,右击**“App_Data”,然后单击“添加新项”**。
说明: 确保在“App_Data”文件夹中创建 XML 文件。“App_Data”文件夹具有的权限允许网页对 XML 文件进行读写数据的操作。
在**“Visual Studio 已安装的模板”之下单击“XML 文件”**。
在**“名称”**框中键入“Authors.xml”。
单击**“添加”**。
创建一个仅包含 XML 指令的新 XML 文件。
复制下面的 XML 数据,然后将其粘贴到文件中,改写该文件中的内容。
XML 文件包含标识数据的数据库结构的架构信息,包括键的主键约束。
说明: 业务组件可以通过适用于应用程序的任何方式来使用数据。本演练使用 XML 文件。
<?xml version="1.0" standalone="yes"?> <dsPubs xmlns="http://www.tempuri.org/dsPubs.xsd"> <xs:schema id="dsPubs" targetNamespace="http://www.tempuri.org/dsPubs.xsd" xmlns:mstns="http://www.tempuri.org/dsPubs.xsd" xmlns="http://www.tempuri.org/dsPubs.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:element name="dsPubs" msdata:IsDataSet="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="authors"> <xs:complexType> <xs:sequence> <xs:element name="au_id" type="xs:string" /> <xs:element name="au_lname" type="xs:string" /> <xs:element name="au_fname" type="xs:string" /> <xs:element name="au_phone" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="Constraint1" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:authors" /> <xs:field xpath="mstns:au_id" /> </xs:unique> </xs:element> </xs:schema> <authors> <au_id>172-32-1176</au_id> <au_lname>West</au_lname> <au_fname>Paul</au_fname> <au_phone>408 555-0123</au_phone> </authors> <authors> <au_id>213-46-8915</au_id> <au_lname>Gray</au_lname> <au_fname>Chris</au_fname> <au_phone>415 555-0120</au_phone> </authors> </dsPubs>
保存 Authors.xml 文件,然后将其关闭。
创建组件
下一步是创建用作业务组件的类。组件将保存在网站的**“App_Code”文件夹中。在实际的应用程序中,可以在任何方便的存储区(包括全局程序集缓存)中保存组件。如果网站还没有名为“App_Code”**的目录,则必须创建一个这样的目录。
创建 App_Code 文件夹
在解决方案资源管理器中,右击网站的名称,单击**“添加 ASP.NET 文件夹”,然后单击“App_Code”**。
说明: 该文件夹必须命名为“App_Code”。
现在,可以将该组件添加到网站中。
创建业务组件
在解决方案资源管理器中,右击**“App_Code”文件夹,然后单击“添加新项”**。
说明: 确保在“App_Code”文件夹中创建新项。
出现**“添加新项”**对话框。
在**“Visual Studio 已安装的模板”之下单击“类”**。
在**“语言”**框中,单击您想使用的编程语言。
在**“名称”**框中键入“BusinessObject”。
单击**“添加”**。
Visual Web Developer 创建新的类文件并打开代码编辑器。
复制下面的代码,然后将其粘贴到文件中,并改写该文件中的内容。
Imports Microsoft.VisualBasic Imports System Imports System.Web Imports System.Data Namespace PubsClasses Public Class AuthorClass Private dsAuthors As DataSet = _ New System.Data.DataSet("ds1") Private filePath As String = _ HttpContext.Current.Server.MapPath _ ("~/App_Data/authors.xml") Public Sub New() dsAuthors.ReadXml(filePath, Data.XmlReadMode.ReadSchema) End Sub Public Function GetAuthors() As DataSet Return dsAuthors End Function End Class End Namespace
using System; using System.Web; using System.Data; namespace PubsClasses { public class AuthorClass { private DataSet dsAuthors = new DataSet("ds1"); private String filePath = HttpContext.Current.Server.MapPath ("~/App_Data/Authors.xml"); public AuthorClass() { dsAuthors.ReadXml (filePath, XmlReadMode.ReadSchema); } public DataSet GetAuthors () { return dsAuthors; } } }
说明: 确保 filePath 变量的值引用先前创建的 XML 文件的名称。
创建类的实例后,该实例读取 XML 文件并将其转换为数据集。类的 GetAuthors 方法返回该数据集。
保存该文件。必须保存该文件,才能正常进行下一节。
使用业务组件显示数据
现在,可以在网页中调用业务组件并显示其数据。若要引用该组件,请使用专为使用对象而设计的 ObjectDataSource 控件。
创建引用该组件的 ObjectDataSource 控件
切换到或打开**“Default.aspx”**页。
说明: 如果没有 Default.aspx 页,可以使用另一个页。也可以向网站添加一个新页。在解决方案资源管理器中,右击网站的名称,单击“添加新项”,然后添加一个“Web 窗体”。
切换到“设计”视图。
在**“工具箱”中,从“数据”文件夹中将一个“ObjectDataSource”**控件拖到页上。
在“属性”窗口中,将**“ID”**设置为“AuthorsObjectDataSource”。
右击**“ObjectDataSource”控件,然后单击智能标记以显示“ObjectDataSource 任务”**菜单。
在**“ObjectDataSource 任务”菜单上,单击“配置数据源”**。
出现**“配置数据源”**向导。
在**“选择业务对象”列表中,单击“PubsClasses.AuthorClass”**。
单击**“下一步”**。
在**“选择”选项卡的“选择方法”列表中,单击“GetAuthors(), returns Dataset”(GetAuthors(),返回数据集)**。
**“GetAuthors”**方法是在先前创建的业务类中定义的。该方法返回的数据集包含 Authors.xml 文件的数据。
单击**“完成”**。
已输入的配置信息指定:要从组件获取数据,则应调用组件的 GetAuthors 方法。
说明: 为 SelectMethod 属性指定的方法名称区分大小写,即使在 Visual Basic .NET 中编程也是如此。
现在,可以使用 ObjectDataSource 控件从组件获取数据。数据将显示在页上的 GridView 控件中。
显示组件的数据
在**“工具箱”中,从“数据”文件夹中将“GridView”**控件拖到页上。
右击**“GridView”控件,如果未显示“常见 GridView 任务”**菜单,则单击智能标记。
在**“常见 GridView 任务”菜单的“选择数据源”框中,单击“AuthorsObjectDataSource”**。
按 Ctrl+F5 运行该页。
即会显示**“GridView”**控件,其中包含 XML 数据。
使用业务组件插入数据
与其他数据源控件(如 SqlDataSource 控件)一样,ObjectDataSource 控件支持更新(插入、更新和删除)。在本节中,将使用一个插入作者记录的方法来修改业务组件。然后,对页进行更改以便用户可以键入新的作者信息,并修改 ObjectDataSource 控件以执行插入操作。
说明: |
---|
在演练的这一部分,将更新先前创建的 Authors.xml 文件。应用程序具有在运行时写入该文件的权限或网页在您尝试更新该文件时显示错误,是十分重要的。如果 Authors.xml 文件是在“App_Data”文件夹中创建的,则会自动设置权限。 |
修改业务组件以允许插入
切换到 BusinessObject 文件。
添加下面的方法作为 AuthorClass 的最终成员。
Public Sub InsertAuthor(ByVal au_id As String, _ ByVal au_lname As String, _ ByVal au_fname As String, ByVal au_phone As String) Dim workRow As DataRow = dsAuthors.Tables(0).NewRow workRow.BeginEdit() workRow(0) = au_id workRow(1) = au_lname workRow(2) = au_fname workRow(3) = au_phone workRow.EndEdit() dsAuthors.Tables(0).Rows.Add(workRow) dsAuthors.WriteXml(filePath, Data.XmlWriteMode.WriteSchema) End Sub
public void InsertAuthor (String au_id, String au_lname, String au_fname, String au_phone) { DataRow workRow = dsAuthors.Tables[0].NewRow (); workRow.BeginEdit (); workRow[0] = au_id; workRow[1] = au_lname; workRow[2] = au_fname; workRow[3] = au_phone; workRow.EndEdit (); dsAuthors.Tables[0].Rows.Add (workRow); dsAuthors.WriteXml (filePath, XmlWriteMode.WriteSchema); }
说明: 请特别注意用于将作者信息传入方法的变量的名称(au_id、au_lname、au_fname 和 au_phone)。这些名称必须与先前创建的 XML 文件的架构中定义的列名相匹配。
新方法采用四个值执行插入操作,这四个值将在页中以参数的形式提供。该方法在数据集中创建一个新行,然后将更新后的数据集以 XML 文件的形式写出。
保存该文件。
下一步是对页进行更改,以便用户可以输入新的作者信息。在下面的过程中,将使用 DetailsView 控件。
添加用于插入数据的控件
切换到或打开 Default.aspx 页。
切换到“设计”视图。
在**“工具箱”中,从“数据”文件夹中将“DetailsView”**控件拖到页上。
说明: 页的具体布局无关紧要。
在**“DetailsView 任务”菜单上,在“选择数据源”框中单击“AuthorsObjectDataSource”**。
说明: 如果“DetailsView 任务”菜单不可见,则单击智能标记。
在“属性”窗口中,将**“AutoGenerateInsertButton”**设置为 true。
这会使**“DetailsView”控件呈现一个“新建”**按钮,用户可以单击该按钮使控件进入数据输入模式。
最后,必须配置 ObjectDataSource 控件,以指定该控件插入数据应执行的操作。
为插入数据配置数据源控件
右击**“AuthorsObjectDataSource”,单击“属性”,然后将“InsertMethod”**设置为“InsertAuthor”。
这是添加到业务组件的方法的名称。
现在即可将新的作者插入 XML 文件中。
测试插入操作
按 Ctrl+F5 运行 Default.aspx 页。
在**“DetailsView”控件中单击“新建”**按钮。
控件重新显示,其中包含文本框。
输入新的作者信息,然后单击**“插入”**。
新的作者信息即添加到 XML 文件中。**“GridView”**控件会立即反映新的记录。
后续步骤
本演练演示如何使用数据组件。您可能还想试验导航的其他功能。例如,您可能希望:
添加、更新和删除功能。为此,需要向组件添加一些方法。这样做类似于添加插入逻辑 -- 向组件添加一个方法,配置数据源控件来调用该组件方法,添加相应的参数,添加一行代码来调用数据源控件的 Update 和 Delete 方法。有关详细信息,请参见演练:使用 DetailsView 服务器控件在网页上编辑和插入数据。
更改业务组件可使用数据库数据而不使用 XML 文件。无需对页上的控件进行任何更改。
对哪些用户可以对数据进行更改进行限制。一个典型方法是向网站添加成员资格和角色,然后建立一些规则,业务组件在允许更改数据前可以按照这些规则进行检查。有关详细信息,请参见演练:创建具有成员资格和用户登录功能的网站 和演练:通过角色管理网站用户。
请参见
任务
演练:具有 Visual Studio 数据组件的数据绑定网页
演练:在 Visual Web Developer 中使用网站的共享代码
演练:在 Visual Web Developer 中创建基本网页