欢迎投稿

今日深度:

一句代码实现批量数据绑定 上(1)(6)

五、多个控件对应同一个实体属性

在上面的例子中,我们的控件的ID和对应的实体属性是相同的。但是在很多情况下,相同的页面上有不止一个控件映射到实体的同一个属性上。而控件ID的唯一性决定了我们不能为它们起相同的ID。在这种情况下,我们采用“基于后缀”的映射。也就是为,在为控件进行命名的时候,通过“实体属性名+后缀”形式来指定。

如果你仔细看了DataBinder的定义,不论是实例方法BindData接受Control类型参数的),还是静态方法BuildBindingMappings,都具有一个缺省参数suffix,这就是为这种情况设计的。在默认的情况下,这个参数的值为空字符串,所以我们需要控件和实体属性具有相同的名称。如果控件是基于“实体属性名+后缀”来命名的,就需要显式指定这个参数了。为了演示这种情况,我们将例子中的所有需要绑定的空间ID加上一个“_Xyz”字符作为后缀。

  1. <table> 
  2.  <tr> 
  3.      <td style="width:20%;text-align:right">ID:</td> 
  4.      <td><asp:Label ID="ID_Xyz" runat="server"></asp:Label></td> 
  5.  </tr> 
  6.   <tr> 
  7.      <td style="width:20%;text-align:right">First Name:</td> 
  8.      <td><asp:TextBox ID="FirstName_Xyz" runat="server"></asp:TextBox></td> 
  9.  </tr> 
  10.  <tr> 
  11.     <td style="width:20%;text-align:right">Last Name:</td> 
  12.     <td><asp:TextBox ID="LastName_Xyz" runat="server"></asp:TextBox></td> 
  13. </tr> 
  14.  <tr> 
  15.     <td style="width:20%;text-align:right">Gender:</td> 
  16.     <td> 
  17.         <asp:RadioButtonList ID="Gender_Xyz" runat="server" RepeatDirection="Horizontal"> 
  18.             <asp:ListItem Text="Male"   Value = "Male" /> 
  19.             <asp:ListItem Text="Female" Value = "Female" /> 
  20.         </asp:RadioButtonList> 
  21.     </td> 
  22. </tr> 
  23. <tr> 
  24.     <td style="width:20%;text-align:right">Age:</td> 
  25.     <td><asp:TextBox ID="Age_Xyz" runat="server"></asp:TextBox></td> 
  26. </tr> 
  27.  <tr> 
  28.     <td style="width:20%;text-align:right">Birthday:</td> 
  29.     <td><asp:TextBox ID="Birthday_Xyz" runat="server" Width="313px"></asp:TextBox></td> 
  30. </tr> 
  31.  <tr> 
  32.     <td style="width:20%;text-align:right">Is VIP:</td> 
  33.     <td><asp:CheckBox ID="IsVip_Xyz" runat="server"></asp:CheckBox></td> 
  34. </tr> 
  35.  <tr> 
  36.     <td colspan="2" align="center"> 
  37.         <asp:Button ID="ButtonBind" runat="server" Text="Bind" onclick="ButtonBind_Click" /> 
  38.     </td> 
  39. </tr> 
  40. /table> 

如果采用指定容器控件进行直接绑定的话,就可以这样编程:

  1. protected void ButtonBind_Click(object sender, EventArgs e)  
  2. {  
  3.     var customer = new Customer  
  4.     {  
  5.         ID          = Guid.NewGuid().ToString(),  
  6.         FirstName   = "Zhang",  
  7.         LastName    = "San",  
  8.         Age         = 30,  
  9.         Gender      = "Male",  
  10.        BirthDay    = new DateTime(1981, 1, 1),  
  11.        IsVip       = true 
  12.    };  
  13.    this.DataBinder.BindData(customer, this, "_Xyz");  

如果通过预先创建的BindingMapping集合进行数据绑定,那么代码将是这样:

  1.  protected void ButtonBind_Click(object sender, EventArgs e)  
  2.  {  
  3.      var customer = new Customer  
  4.      {  
  5.          ID          = Guid.NewGuid().ToString(),  
  6.          FirstName   = "Zhang",  
  7.          LastName    = "San",  
  8.          Age         = 30,  
  9.          Gender      = "Male",  
  10.         BirthDay    = new DateTime(1981, 1, 1),  
  11.         IsVip       = true 
  12.     };  
  13.     
  14.     var bindingMappings = Artech.DataBinding.DataBinder.BuildBindingMappings(typeof(Customer), this, "_Xyz");  
  15.     this.DataBinder.BindData(customer, bindingMappings);  


www.htsjk.Com true http://www.htsjk.com/shujukujc/18893.html NewsArticle 五、多个控件对应同一个实体属性 在上面的例子中,我们的控件的ID和对应的实体属性是相同的。但是在很多情况下,相同的页面上有不止一个控件映射到...
评论暂时关闭