2010-05-26 143 views
15

我想從列表中連接兩個字段以顯示在下拉列表中。 以下是我正在嘗試使用的代碼。我不想改變我的產品的模型,所以我試圖做下面的事情,但我無法想出任何東西,沒有構建我自己的對象與字段連接。在下拉列表中連接要顯示的兩個字段

  skuDropDown.DataSource = List<product> 
      skuDropDown.DataTextField = "ProductId" // want to combine with"Description"; 
      skuDropDown.DataValueField = "ProductId"; 
      skuDropDown.DataBind(); 

感謝任何想法會有所幫助。

+0

恐怕你沒有別的選擇,只能擴展域名 – 2010-05-26 20:34:58

回答

26

要分配源給你的方法,我會去使用LINQ創建一個你想要的屬性的匿名類型。類似於

List<Product> products = new List<Product>(); 
products.Add(new Product() { ProductId = 1, Description = "Foo" }); 
products.Add(new Product() { ProductId = 2, Description = "Bar" }); 

var productQuery = products.Select(p => new { ProductId = p.ProductId, DisplayText = p.ProductId.ToString() + " " + p.Description }); 

skuDropDown.DataSource = productQuery; 
skuDropDown.DataValueField = "ProductId"; 
skuDropDown.DataTextField = "DisplayText"; 
skuDropDown.DataBind(); 
+0

謝謝,這個工作很喜歡,一旦我把它搞砸了 – Locke12 2010-05-26 21:29:08

0

創建一個擴展產品的新類,將List內容強制轉換爲擴展類,該擴展類包含一個新屬性,該屬性返回ProductID和Description的連接值。

我認爲應該工作OTOMH。

我知道你不想改變產品結構,這就是爲什麼我建議做一個擴展類。但是如果沒有將它綁定到對象的某個字段上,它是不可能的。

0

不幸的是,如果您使用的是數據綁定,那麼DataTextField必須是數據源中字段的名稱。

你可以做的一件事是在你綁定它們並修改它們的Text屬性後迭代下拉列表中的項目。唯一要做的其他事情是將連接字段添加到數據對象中。

1

你可以這樣做:

List<Product>.ForEach(
    x => skuDropDown.Items.Add(
    new Item(x.ProductId + " " x.ProductDescription, x.ProductId) 
); 

通過名單只是循環和每個項目添加到下拉列表中。這就是.net會在你的例子中幕後爲你做的。

0

您只需重寫產品的.ToString()方法。

public override string ToString() 
{ 
    return ProductID + " " + ProductDescription; 
} 

然後你需要做的就是綁定到下拉菜單。根據我的理解,下拉標籤綁定到綁定到集合中的對象的tostring()。

換句話說,這樣做。

List<Product> products = new List<Product>();  
products.Add(new Product() { ProductId = 1, Description = "Foo" });  
products.Add(new Product() { ProductId = 2, Description = "Bar" });  

var productQuery = products.Select(p => new { ProductId = p.ProductId, DisplayText = p.ProductId.ToString() + " " + p.Description });  

skuDropDown.DataSource = productQuery;  
skuDropDown.DataBind(); 
4

,如果你有一個類來表示一個產品,只是創建擴展類的屬性,並返回其組合,例如:

 public string ID_Description { 
      get 
      { 
       return string.Format("{0} ({1})", Name, ProductId); 
      } 
     } 

,並在你的數據綁定下拉列表中引用你的財產

skuDropDown.DataSource = productQuery;  
skuDropDown.DataValueField = "ProductId";  
skuDropDown.DataTextField = "ID_Description";  
skuDropDown.DataBind(); 
相關問題