适合计算机专业的毕业设计翻译.docx
- 文档编号:4465592
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:16
- 大小:300.46KB
适合计算机专业的毕业设计翻译.docx
《适合计算机专业的毕业设计翻译.docx》由会员分享,可在线阅读,更多相关《适合计算机专业的毕业设计翻译.docx(16页珍藏版)》请在冰豆网上搜索。
适合计算机专业的毕业设计翻译
MSDN杂志
2006年12月作者:
RickStrahl
用自定义控件简化ASP.NET2.0中的数据绑定
ASP.NET2.0包含许多新的数据绑定功能,可以简化各种数据库绑定方案。
不幸的是,一种常见简单控件数据绑定方案并没有太大改变。
虽然这在窗体的Web应用程序中是一种常见的方案,但它仍然是一个手动和耗时的过程。
简单控件数据绑定是指将单个值绑定到控件属性的过程。
例如,文本框、复选框、单选按钮或列表控件的选定值之类的窗体控件绑定到单个数据或对象值。
这将使简单控件数据绑定得到明显改进,如果能够以一致的方式来确定性地处理数据绑定、管理错误的捕获和显示,在本文中,我介绍了一种自定义扩展程序控件,可以从数据或对象绑定任意单个值到任意控件属性。
它可以扩展和支持Web窗体上的任何现有控件
在这一过程中,我还将证明一种灵活而直观的方法,该方法可以让数据绑定和取消绑定、验证、错误处理以及在基于窗体的Web界面中显示错误等行为保持一致。
我也将深入探讨这个细节,就是控件是怎样成的并介绍其中一些有趣的优点。
wwDataBinder控件用于简单控件数据绑定。
具体而言,该控件管理的绑定的概念类似于:
“将DataRow的CompanyName值绑定到TextBox的Text属性”或者“将Item.Entity.Pk属性绑定到DropDown列表的SelectedValue属性”。
该控件管理的是将指定数据值绑定到指定控件属性的过程,以及取消绑定数据值回到底层数据项的过程。
这是真正的两种方式的数据绑定。
数据绑定的问题
ASP.NE提供了适当的本地支持。
它的本地数据绑定表达式使用<%#Eval("FieldName")%>或直接页面表达式(如
<%#this.Item.Entity.Description%>)将数据绑定到控件属性。
您可以启动数据绑定过程,对页面的任何控件调用DataBind方法来。
此方法对于入站绑定而言非常好用。
尽管如此,也不能取消绑定并使数据重新成为底层数据字段或属性。
ASP.NET2.0介绍了GridView、FormView和DetailsView控件,它们使你使用<%#Bind("FieldName")%>语法来提供两种方式数据绑定。
不幸的是,这些控件紧附于底层数据源,必须基于IEnumerable。
因此不支持绑定到单个实体对象。
对于本地取消绑定机制而言,可能最严重的问题或许是处理取消绑定错误的方式。
如果出现与输入字段的有关的问题,例如数值字段中有字母字符或DateTime值的月份为22,当您试着保存值时就会引发页面异常。
您可以在页面级错误处理中抓住这个异常,但您不能得到信息,因为第一个异常将停止取消绑定过程。
如果你有两到三个错误在这个页面上,它将以混合的方式处理这些错误,而这将造成UI极不友好(虽然你可以使用验证程序来防止而不是处理这个问题)。
介绍双向数据绑定控件
我创建了wwDataBinder控件,以一种灵活(我希望更有逻辑)的方式来管理简单数据绑定。
该控件提供了许多特性和功能:
支持确定两种方式的数据绑定
绑定单个对象或数据值到控件属性
撤回单个对象和数据值到控件属性
从文本到类型化数据处理数据转换
管理BindingErrors中的任何绑定错误
支持用户验证事件
验证输入的值
在控件附近显示错误图标
显示信息摘要链接到控件
以编程方式增加绑定错误
要使用该控件,只需将其放置到ASP.NET页面上即可。
该控件充当窗体上任何现有控件的扩展程序控件,此外,它还在VisualStudio®2005属性编辑器中为已扩展控件添加DataBindingItem属性(如图 1所示)。
图1 用数据绑定功能扩展控件(单击该图像获得较小视图)
图1 用数据绑定功能扩展控件(单击该图像获得较大视图)
该控件在窗体上显示为一个无明显特征的灰色容器(从图 1的底部可以看出),它在运行时并不呈现。
之所以在窗体上显示该控件只是为了使您能够对wwDataBinder控件本身设置属性。
作为一个扩展程序控件,wwDataBinder包含DataBindingItem的集合,其中DataBindingItem用于保存每个已扩展控件的配置值。
这些项的集合编写在HTML标记中,该控件的代码形如:
wwDataBinderID="DataBinder"runat="server" OnValidateControl="DataBinder_ValidateControl"> wwDataBindingItemrunat="server" ControlId="txtProductName" BindingSource="Product.Entity" BindingSourceMember="ProductName"IsRequired="True" ErrorMessageLocation="RedTextAndIconBelow"> wwDataBindingItem> ...moreDataBindingItems
wwDataBinder>
该集合建立DataBinder应用的各个绑定。
虽然wwDataBinder可以扩展现有的控件,但只有在窗体上任意给定控件的DataBindingItem扩展程序属性上显式设置属性,才会执行实际的扩展。
在设计模式下,该扩展程序将公开DataBindingItem属性,这是为了在数据项和控件属性之间提供映射。
支持的数据项为ADO.NET数据对象,例如ADO.NETDataRow字段。
另外,还可以绑定到可通过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["Products"].Rows[0]
BindingSourceMember:
CompanyName
只需牢记:
要使wwDataBinder能够执行绑定,无论要绑定到哪个对象,都必须通过Page的标记为Protected或Public的属性引用该对象。
应首选Public属性,因为中等信任中支持公共反射,而如果使用Protected属性,反射将失败。
绑定不支持Private属性。
除ADO.NET类型外,还可以绑定到.NET基类库(BCL)中的业务实体或类型。
例如,如果您的业务对象允许使用this.Customer.Entity.CompanyName访问CompanyName,则可以将BindingSource表示为:
BindingSource:
Customer.Entity
BindingSourceMember:
CompanyName
您还可以直接绑定到Page对象的成员。
如果Page上存在DateTimeRightNow属性,则绑定将如下所示:
BindingSource:
this
BindingSourceMember:
RightNow
任何BindingSource都隐式使用this或me来表示Page对象。
只要您未将Page本身用作绑定源,这些都是可选的,并不需要加以指定。
BindingSource是相对于顶级容器对象(通常为ASP.NETPage对象)表示的,但可以将顶级容器作为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显示了带有一些绑定错误的窗体示例。
图2 显示绑定错误(单击该图像获得较大视图)
BindingError可以由控件在绑定或取消绑定过程中自动生成,也可以在您的代码中手动将其添加到BindingErrors集合中。
如果输入值不能转换回被绑定的数据项或属性(通常因为数据转换错误),则会自动生成BindingError。
例如,图 2中显示的ReorderExpected日期是一个无效日期,由于数据转换失败,因此控件将自动捕获该错误。
每个DataBindingItem还具有IsRequired属性,毫无疑问,标记为IsRequired的项不能留作空白。
如果有这样的项被保留为空白,将自动生成绑定错误并将该错误添加到BindingErrors中。
该窗体上的其他两处错误都是人为错误。
DairyProducts错误将通过与wwDataBinder关联的ValidateControl事件进行处理。
对于每个绑定的控件,都将引发该事件,并且事件处理程序允许在对控件取消绑定后对每个控件进行检查。
如果确定代码中的某个值无效,则可以通过编程方式来设置BindingItem的BindingErrorMessage以使其返回false,以便让联编程序知道该DataBindingItem存在错误并需要显示在错误列表上。
最后一个错误纯粹是一个编程意义上的错误,它是通过在Page代码中使用wwDataBinder.AddBindingError并指定错误消息以及Control实例或ID来添加的。
这样做可以向绑定了数据的控件分配任意错误消息,并可以使控件带着错误图标显示,并出现在错误列表中。
所有这些都是为了完全以编程方式生成自动绑定错误,从而为错误和错误图标的显示方式带来了巨大的灵活性。
另外,该控件会自动在页面上提取任何验证程序控件及其错误消息和控件ID并将它们合并到绑定错误机制中。
如果某个控件发生错误,则在默认情况下,该控件的旁边将显示一个图标。
显示也可以不显示,您可以从整体上关闭DataBinder的警告图标,也可以通过ErrorMessageLocation属性更改各个DataBindingItem的位置和格式。
默认情况下,将使用WebResource,它指向已编译控件程序集中的嵌入式图像资源。
还可以使用wwDataBinder上的ErrorIconUrl属性显式替代该图像。
该程序集还包含用于显示错误摘要的wwErrorDisplay控件,如图 2所示。
该控件是可选的,但我喜欢用它来实现一致性。
在示例中,我只是将BindingErrors.ToHtml方法的字符串输出分配给text属性。
该控件还具有简单的消息显示方法(例如ShowError和ShowMessage),它们显示一行消息和一个图标,为在页面上显示消息提供了一致的方式。
您将注意到,错误摘要中提供了每个所显示错误的链接。
通过这些链接可跳转到发生错误的各个控件并使其突出显示,从而有助于找到错误和修复错误。
图2 显示绑定错误(单击该图像获得较小视图)
MSDNMagazine
December2006RickStrahl
SimplifyDataBindingInASP.NET2.0WithOurCustomControl
ASP.NET2.0includesmanynewdatabindingfeaturesthatcansignificantlysimplifyavarietyofdatabindingscenarios.Unfortunately,oneverycommonscenario-simplecontroldatabinding-haschangedverylittle.Whilethisisacommonscenarioinforms-basedWebapplications,itremainsforthemostpartamanualandtime-consumingprocess.
Simplecontroldatabindingreferstotheprocessofbindingasinglevaluetoapropertyofacontrol-forinstance,bindingformcontrolsliketextboxes,checkboxes,radiobuttons,orselectedvaluesoflistcontrolstoindividualdataorobjectvalues.Thiscouldbenefitsignificantlyfromaconsistentapproachtohandlingdatabindingdeterministically,aswellasmanagingerrortrappinganddisplayconsistently.Inthisarticle,Iintroduceacustomextendercontrolthatcanbeusedtobindanyindividualvaluefromdataorobjectstoanycontrolproperty.ItcanextendandprovidedesignersupportforanyexistingcontrolonaWebForm.
Intheprocess,I'lldemonstrateaflexibleandintuitiveapproachthatprovidesconsistentbehaviorfordatabindingandunbinding,validation,errorhandling,anderrordisplayinforms-basedWebinterfaces.I'llalsodigintothedetailsofhowthecontrolisbuiltanddescribesomeoftheinterestingbenefits.
ThewwDataBindercontroladdressessimplecontroldatabinding.Inmoreconcreteterms,thecontrolmanagesbindingsthatexpressconceptssuchas"bindthevalueoftheDataRow'sCompanyNamefieldtotheTextBox'sTextproperty"or"bindtheItem.Entity.PkpropertytotheSelectedValuepropertyofaDropDownlist."Thecontrolmanagestheprocessofbindingthespecifieddatavaluestothespecifiedcontrolproperty,aswellasunbindingthevaluebackintotheunderlyingdataitem.Thisistruetwo-waydatabinding.
TheProblemwithStockDataBinding
ASP.NETnativelyprovidesyouwithreasonablesupportforinbounddatabinding.Itsnativedatabindingexpressionsuse<%#Eval("FieldName")%>ordirectpagelevelexpressionslike<%#this.Item.Entity.Description%>tobinddatatocontrolproperties.YoucalltheDataBindmethodonthepageoranycontrolofthepagetoinitiatethedatabindingprocess.Thisworkswellforinboundbinding.
However,unbindingandgettingthedatabackintotheunderlyingdatafieldsorpropertiesisnotasreadilyavailable.ASP.NET2.0introducestheGridView,FormView,andDetailsViewcontrols,whichletyouuse<%#Bind("FieldName")%>syntaxthatprovidestwo-waydatabinding.Unfortunately,thesecontrolsarecloselytiedtoanunderlyingdatasourcecontrol,whichmustbeIEnumerable-based.Sobindingtoanindividualentityobject,forexample,isnotsupported.
Perhapsthemostseriousproblemwiththenativeunbindingmechanismsisthewaythatunbindingerrorsarehandled.Ifthere'saproblemwiththeformattingofaninputfield-sayanumericfieldthatcontainsanalphacharacteroraDateTimevaluethatsetsamonthof22-yougetapage-levelexceptionwhenyoutrytosavethevalue.Whileyoucantraptheexceptioninpage-levelerrorhandling,youcan'tsummarizethisinformationbecausethefirstexceptionwillstoptheunbindingprocess.Ifyouhavetwoorthreeerrorsonthepage,itwilltakemultiplepostbackstohandletheseerrors,whichisveryunattractivefromaUIperspective(thoughyoucouldusevalidatorstoprevent,ratherthanhandle,theproblem).
IntroducingaTwo-WayDataBindingControl
IcreatedthewwDataBindercontroltomanagesimpledatabindinginamoreflexible(andIhopemorelogical)way.Thecontrolprovidesanumberofhandyfeaturesandcapabilities:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 适合 计算机专业 毕业设计 翻译