适合计算机专业的毕业设计翻译

2019-04-22 22:47

MSDN 杂志

2006年12月 作者: Rick Strahl

用自定义控件简化 ASP.NET 2.0 中的数据绑定

ASP.NET 2.0 包含许多新的数据绑定功能,可以简化各种数据库绑定方案。不幸的是,一种常见简单控件数据绑定方案并没有太大改变。虽然这在窗体的 Web 应用程序中是一种常见的方案,但它仍然是一个手动和耗时的过程。

简单控件数据绑定是指将单个值绑定到控件属性的过程。例如,文本框、复选框、单选按钮或列表控件的选定值之类的窗体控件绑定到单个数据或对象值。这将使简单控件数据绑定得到明显改进,如果能够以一致的方式来确定性地处理数据绑定、管理错误的捕获和显示,在本文中,我介绍了一种自定义扩展程序控件,可以从数据或对象绑定任意单个值到任意控件属性。它可以扩展和支持 Web 窗体上的任何现有控件

在这一过程中,我还将证明一种灵活而直观的方法,该方法可以让数据绑定和取消绑定、验证、错误处理以及在基于窗体的 Web 界面中显示错误等行为保持一致。我也将深入探讨这个细节,就是控件是怎样成的并介绍其中一些有趣的优点。

wwDataBinder 控件用于简单控件数据绑定。具体而言,该控件管理的绑定的概念类似于:“将 DataRow 的 CompanyName 值绑定到 TextBox 的 Text 属性”或者“将 Item.Entity.Pk 属性绑定到 DropDown 列表的 SelectedValue 属性”。该控件管理的是将指定数据值绑定到指定控件属性的过程,以及取消绑定数据值回到底层数据项的过程。这是真正的两种方式的数据绑定。

数据绑定的问题

ASP.NE提供了适当的本地支持。它的本地数据绑定表达式使用 <%# Eval(\或直接页面表达式(如

<%# this.Item.Entity.Description %>)将数据绑定到控件属性。您可以启动数据绑定过程,对页面的任何控件调用 DataBind 方法来。此方法对于入站绑定而言非常好用。

尽管如此,也不能取消绑定并使数据重新成为底层数据字段或属性。ASP.NET 2.0 介绍了 GridView、FormView 和 DetailsView 控件,它们使你使用 <%# Bind(\%> 语法来提供两种方式数据绑定。不幸的是,这些控件紧附于底

- 1 -

层数据源,必须基于 IEnumerable。因此不支持绑定到单个实体对象。

对于本地取消绑定机制而言,可能最严重的问题或许是处理取消绑定错误的方式。如果出现与输入字段的有关的问题,例如数值字段中有字母字符或 DateTime 值的月份为 22,当您试着保存值时就会引发页面异常。您可以在页面级错误处理中抓住这个异常,但您不能得到信息,因为第一个异常将停止取消绑定过程。如果你有两到三个错误在这个页面上,它将以混合的方式处理这些错误,而这将造成 UI 极不友好(虽然你可以使用验证程序来防止而不是处理这个问题)。

介绍双向数据绑定控件

我创建了 wwDataBinder 控件,以一种灵活(我希望更有逻辑)的方式来管理简单数据绑定。该控件提供了许多特性和功能: 支持确定两种方式的数据绑定 绑定单个对象或数据值到控件属性 撤回单个对象和数据值到控件属性 从文本到类型化数据处理数据转换 管理 BindingErrors 中的任何绑定错误 支持用户验证事件 验证输入的值

在控件附近显示错误图标 显示信息摘要链接到控件 以编程方式增加绑定错误

要使用该控件,只需将其放置到 ASP.NET 页面上即可。该控件充当窗体上任何现有控件的扩展程序控件,此外,它还在 Visual Studio? 2005 属性编辑器中为已扩展控件添加 DataBindingItem 属性(如图 1 所示)。

- 2 -

图 1 用数据绑定功能扩展控件 (单击该图像获得较大视图)

该控件在窗体上显示为一个无明显特征的灰色容器(从图 1 的底部可以看出),它在运行时并不呈现。之所以在窗体上显示该控件只是为了使您能够对 wwDataBinder 控件本身设置属性。

作为一个扩展程序控件,wwDataBinder 包含 DataBindingItem 的集合,其中 DataBindingItem 用于保存每个已扩展控件的配置值。这些项的集合编写在 HTML 标记中,该控件的代码形如:

OnValidateControl=\

BindingSourceMember=\ ErrorMessageLocation=\ ... more DataBindingItems

该集合建立 DataBinder 应用的各个绑定。虽然 wwDataBinder 可以扩展现有的控件,但只有在窗体上任意给定控件的 DataBindingItem 扩展程序属性上显式设置属

- 3 -

性,才会执行实际的扩展。

在设计模式下,该扩展程序将公开 DataBindingItem 属性,这是为了在数据项和控件属性之间提供映射。支持的数据项为 ADO.NET 数据对象,例如 ADO.NET DataRow 字段。另外,还可以绑定到可通过 Page 对象引用的对象以及对象的任意简单属性。您可以绑定 this.Customer.Entity.CompanyName,其中 this 指的是 Page 对象,它是生成任何绑定表达式的基对象。

在执行绑定时,使用 BindingSource 来标识数据项。BindingSource 包含两个属性:BindingSource(描述基对象的字符串属性)和 BindingSourceMember(提供要绑定到的字段或属性的映射)。如果通过编程的方式访问,还可以利用 BindingSourceObject 属性(而不是 BindingSource 字符串)来提供引用。

假设需要绑定到 DataRow 对象。为了将 wwDataBinder 绑定到 DataRow,需要能够通过引用 Page 来访问 DataRow。因此可以使用 this.MyDataRow。这种情况下,应绑定到:

BindingSource: MyDataRow

BindingSourceMember: CompanyName 如上所示,CompanyName 是应绑定到的字段名。

此外,还可以使用 this.Customer.DataRow,其中 Customer 是具有 DataRow 属性的业务对象。这种情况下,应绑定到: BindingSource: Customer.DataRow BindingSourceMember: CompanyName

您可以用同样的方式绑定到 DataTable。在将 DataTable 或 DataSet 用作 BindingSource 对象时,wwDataBinder 将假定将表的第一个 DataRow 或第一个表以及第一个 DataRow 作为 DataSet。您还可以更加直接地绑定 ADO.NET 对象,如下所示:

BindingSource: MyDataSet.Tables[\BindingSourceMember: CompanyName

只需牢记:要使 wwDataBinder 能够执行绑定,无论要绑定到哪个对象,都必须通过 Page 的标记为 Protected 或 Public 的属性引用该对象。应首选 Public 属性,因为中等信任中支持公共反射,而如果使用 Protected 属性,反射将失败。绑定不支持 Private 属性。

除 ADO.NET 类型外,还可以绑定到 .NET 基类库 (BCL) 中的业务实体或类型。例如,如果您的业务对象允许使用 this.Customer.Entity.CompanyName 访问

- 4 -

CompanyName,则可以将 BindingSource 表示为: BindingSource: Customer.Entity BindingSourceMember: CompanyName

您还可以直接绑定到 Page 对象的成员。如果 Page 上存在 DateTime RightNow 属性,则绑定将如下所示: BindingSource: this

BindingSourceMember: RightNow

任何 BindingSource 都隐式使用 this 或 me 来表示 Page 对象。只要您未将 Page 本身用作绑定源,这些都是可选的,并不需要加以指定。BindingSource 是相对于顶级容器对象(通常为 ASP.NET Page 对象)表示的,但可以将顶级容器作为 DataBind 和 Unbind 方法的参数部分提供。如果要在顶级容器为 UserControl 而不是 Page 的用户的控件中使用 wwDataBinder,这一方法将十分有用。

BindingSourceMember 始终是简单类型,例如 int、string、DateTime、bool 等。它们也可以是 Enum 值,这些值将转换为字符串并适用于双向绑定。

BindingSource 的工作是在数据项或属性与要将值绑定到的控件属性之间建立绑定。此映射可用于绑定到控件属性以及由控件属性重新成为数据项或属性。入站绑定通过调用 wwDataBinder.DataBind 方法建立,而取消绑定则通过调用 wwDataBinder.Unbind 方法来执行。这一过程具有确定性,因为您是在代码中显式调用这些方法的,这为绑定的处理方式提供了大量灵活性。

DataBindingItem 公开了与数据绑定过程关联的其他属性,如图 1 所示。BindingProperty 确定要绑定到的控件的字段(默认为 Text),但若要绑定到 CheckBox,则可能需要绑定到 Checked,而若要绑定到列表控件,则需要绑定到 SelectedValue。

数据绑定可以是单向、双向或无方向的。输入控件(如,文本框)通常使用双向绑定,而显示控件(如,标签)则使用单向绑定。如果需要让控件参与绑定错误管理,但不想将该控件绑定到某个值,无方向绑定将非常适合这种情况。

wwDataBinder 控件可以自动管理绑定和取消绑定错误。当某个控件无法绑定或取消绑定时,该控件将在 BindingErrors 集合中生成 BindingError,但不会触发异常。您可以使用 ToHtml 方法在此集合中查询各个绑定错误和检索错误的摘要。默认情况下,发生错误的每个控件旁边都会显示错误图标。图 2 显示了带有一些绑定错误的窗体示例。

- 5 -


适合计算机专业的毕业设计翻译.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014年人教版七年级下数学期中考试试卷附答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: