|
2、三种数据绑定方式
2.1 方法1:显式声明数据绑定方式
编辑顾客信息的方法之一是显式的数据绑定方式,这意味这对于每一个数据绑定都需要执行前面说的四个步骤,例如对于Customer的Load方法,可能的代码类似如下:
public void Load() { … //Load customer record using data reader _firstName=(string)dataReader["FirstName"]; _lastName=(string)dataReader["LastName"]; … } | 在这种情况下,当Customer对象有更多属性时,您就需要编写更多的代码来完成数据绑定功能。如果您想为Customer新增加一个属性,你不得不在6个地方进行更改:
1)数据库
2)数据绑定1--数据业务逻辑对象
3)数据绑定2--业务逻辑对象在绑定到Web控件上
4)在Web窗体上添加新的控件
5)数据绑定3--Web控件绑定到业务逻辑上
6)数据绑定4--业务逻辑到数据库上
正如您所看到的上面方法的缺点--重复工作大且维护困难
2.2 使用微软的方式--类型化的DataSet和FormView
对于这个方法,微软已经为我们提供了很多例子了,,如果您的程序足够简单,那么您就可以从Customer表里生成一个类型化的DataSet,并将其绑定到FormView上,由FormView来执行添加和编辑Customer对象的功能。
对于 Database和Business对象之间的绑定,您可以使用类型化的DataSet向导完成,对于Busiess和Web控件之间的绑定您可以使用FormView控件的InserItemTemplate和EditItemTemplate 模板完成,并制定绑定规则,类似代码如下:
| <asp:TextBox ID="txtLastName" Text='' RunAt="Server" /> | 您可能已经注意到了在微软提供的例子里使用这种方式对简单应用程序来说,工作的确实相当的好,但是对于稍微复杂的应用程序来说,您就需要不断扩展自己的代码。
这种方式可以简单数据的维护,例如你需要为Customer增加一个新的属性,你就只需要更改三处就可以了:
1、数据库
2、Web Form - EditItemTemplate
3、Web Form - InsertItemTemplate
2.3 XLib方式的绑定
XLib在同时能够提供前面介绍的两种绑定方式外,还增加了数据维护方面的灵活性。XLib使用反射技术来自动从业务逻辑对象到数据库,到Web控件之间的映射。
在执行数据库到业务逻辑对象方面,它使用了XbusinessObjectBinder对象,下面的代码片断样式了Customer对象的代码:
public class Customer { … public void Load() { dataReader=new XDataReader();
//Load data using auto-generated query into XDataReader //XDataReader works just like data reader - except it automatically //converts Database values types into INulllable C# types
//Binding #1 XBusinessObjectBinder.FromDataReader(this, dataReader); }
public void Save() { XDataWriter dataWriter=new XDataWriter(); //XDataWriter automatically generates INSERT/UPDATE/DELETE sql s //statements
//Binding #4 XBusinessObjectBinder.ToDataWriter(this, dataWriter)
dataWriter.Update(); } } | 对于业务逻辑到Web控件的绑定,它提供了XWebControlsBinder 控件,下面代码片断显示了顾客编辑页面的代码:
public partial class EditCustomer { protected void Page_Load(object sender, EventArgs e) {…}
protected void btnSubmit_Click(object sender, EventArgs e) {…}
private void LoadData() { Customer customer=new Customer(); customerID=_customerID; customer.Load();
//Binding #2 XWebControlsBinder.FromObject(this, customer); }
private void SaveData() { Customer customer=new Customer(); if (_isUpdateMode) { customer.ID=_customerID; customer.Load(); }
//Binding #3 //Copy control values into customer properties XwebControlsBinder.ToObject(this, customer);
customer.Save(); } } | 正如您所看到的,这种方法既去掉了第一种方法的缺点,又具有第二中方法的有点。
[上一页] [1] [2]
|