2011-10-18 111 views
2

有沒有什麼方法可以將自定義類自動綁定到給定的一組Web控件?舉例來說,假設我有一個類的實例BindableObject將數據綁定到ASP.NET控件

public class BindableClass 
{ 
    public string FirstString { get; set; } 
    public string SecondString { get; set; } 
    public bool BooleanValue { get; set; } 
} 

我希望能夠(在某種程度上)做,而不必我以前曾定義了什麼SomeGroupOfControls

BindableObject.BindToForm(SomeGroupOfControls); 

提供,做

txtSomeTextBox.Text = BindableObject.FirstString; 
lblSomeTextBox.Text = BindableObject.SecondString; 
chkSomeCheckBox.Checked = BindableObject.BooleanValue; 

這是可能以某種方式?

回答

1

我不認爲這是一個很好的方法。即使你通過一組控件,你怎麼知道哪個字段綁定到哪個控件?當然,有了一堆邏輯,你大概可以在的大部分時間工作,但我真的不認爲這是值得它需要的工作量。我也沒有看到以這種方式做任何實際的好處。

我建議做舊的嘗試和正確的方法:

Product prod = GetSomeProduct();  

txtProductName.Text = prod.ProductName; 
txtProductCode.Text = prod.ProductCode; 

如果你希望將對象綁定到一個datbound控制,這將是一個不同的故事的集合,但真的沒有理由在你的情況下做所有這些。

下面是如何創建對象的可綁定集合的例子:

public class Products : CollectionBase 
{ 
    public Products() 
    { 
     // default constructor 
    } 

    public int Add(Product product) 
    { 
     return List.Add(product); 
    } 

    public void Remove(Product product) 
    { 
     List.Remove(product); 
    } 

    public class Product 
    { 

     private string productName; 

     public Product(string Name) 
     { 
      productName = Name; 
     } 

     public string Name 
     { 
      get 
      { 
       return productName; 
      } 
      set 
      { 
       productName = value; 
      } 
     } 
    } 
} 
0

您可以在用戶控件和對象上使用反射。您將循環訪問對象屬性,在使用命名轉換的usercontrol/panel中搜索webcontrol。檢測控件的類型以設置Checked或Text屬性。

+0

這是一個很好的想法,但是實施將各種醜陋。 –

0

您可以使用ObjectDataSource class。 Web上有很多關於如何使用它的教程和示例。它確實適用於DetailsView,GridView和FormView。這是非常可定製和靈活的控制,它非常擅長將領域模型(aspx)與領域模型分離開來,並且可以做你想做的事情 - 將目標類的屬性映射到aspx中相應的綁定表達式。