2009-08-05 82 views
1

由於支持多租戶的遺留數據庫,我有一個包含複合鍵的對象列表。那麼我如何將該列表綁定到asp.net中的複選框列表?我們目前使用c#3.5。如何將複合鍵對象列表綁定到複選框列表?

這裏的類:

public class SiteKey 
{ 
    public int Id { get; set; } 
    public int CustomerId { get; set; } 
} 
public class Order 
{ 
    public SiteKey Key { get; set; } 
    public string Name { get; set; } 
} 

我的倉庫返回,我想,然後綁定到一個複選框列表的IList<Order>。 此代碼:

chkList.DataValueField = "Key"; 
chkList.DataTextField = "Name"; 

正常顯示,但回來的值(chkList.Items[0].Value)只包含「MyAssemblyName.SiteKey」,而不是重點。

我該如何有效地完成這項工作?

謝謝!

回答

3

重寫SiteKey上的ToString()以返回包含組成主鍵的屬性的字符串表示形式的連接字符串。然後,您必須解析項目的Value屬性以檢索密鑰。

public class SiteKey 
{ 
    public int Id { get; set; } 
    public int CustomerId { get; set; } 

    public override string ToString() 
    { 
     return Id.ToString() + "|" + CustomerId.ToString(); 
    } 
} 

,並在方法檢索關鍵:

string[] siteKey = chkList.Items[0].Value.Split('|'); 
int id = int.Parse(siteKey[0]); 
int customerId = int.Parse(siteKey[1]); 
+0

像一個魅力工作。非常感謝! – 2009-08-05 02:46:04

0

您是否可以修改訂單類?使用SiteKey作爲值字段返回類型(除非您重寫ToString()方法)。

public class Order 
{ 
    public SiteKey Key { get; set; } 
    public int KeyId { get{return Key.Id;} } 
    public string Name { get; set; } 
} 

chkList.DataValueField = "KeyId"; 
chkList.DataTextField = "Name"; 
2

傑米的建議是好的,但並不是覆蓋的ToString(),我只是想突出你的IList <訂單>到IEnumerable的<列表項>之前綁定:

即:

 
var items = 
    from o in dataList // dataList being IList returned from repository 
    select new ListItem(o.Name, 
         String.Format("{0}|{1}", 
             o.Key.Id, o.Key.CustomerId)); 

// ... bind items to dropdown ... 

我更喜歡這個,而不是重寫ToString(),因爲ToString()是通用的並且在任何地方都可以使用,因此可以是屁股疼痛,而這是本地修改,不會影響其他任何內容。