2009-12-15 72 views
2

我有一些基本的下拉列表數據綁定代碼。我需要在運行時修改數據源並插入一個新字段。動態添加字段到C#中的集合?

ddlPrimaryCarrier.DataSource = FinancialInstitutions; 
      ddlPrimaryCarrier.DataValueField = "EntityCode"; 
      ddlPrimaryCarrier.DataTextField = "EntityNameDesc"; 
      ddlPrimaryCarrier.DataBind(); 

我其實想要添加一個字段到描述和代碼的格式化字符串集合。像...

var newField = string.Format("({0}) - {1}", "EntityCode", "EntityNameDesc"); 

然後

ddlPrimaryCarrier.DataTextField = "newField"; 

什麼是做這種正確的方法是什麼?我可以循環訪問現有的集合並使用我需要的字段創建一個匿名類型的新列表嗎?任何人都有如何做到這一點的例子?

感謝, 〜CK在聖地亞哥

+0

FinancialInstitutions是什麼類型? – 2009-12-15 17:43:16

+0

什麼類型的數據源/列表/集合是FinancialInstitutions?從數據庫中選擇實體代碼+實體代碼時,連接它們可能更容易。 – ZimSystem 2009-12-15 17:43:24

+0

VAR newDatasource = FinancialInstitutions.Select( C => 新 { 代碼= c.EntityCode, 描述=的String.Format( 「({0}) - {1}」,c.EntityCode,c.EntityNameDesc ) }); 我走了,這似乎是好的。 – Hcabnettek 2009-12-15 17:44:25

回答

0

假設FinancialInstitutionsFinancialInstitution對象的集合,一個新的屬性添加到您的FinancialInstitution類:

public string DisplayName 
{ 
    get { return string.Format("({0}) - {1}", EntityCode, EntityNameDesc); 
} 

如果是DataTable,你可以添加一個計算列:

FinancialInstitutions.Columns.Add("DisplayName", typeof(string), "'(' + EntityCode + ') - ' + EntityNameDesc"); 

在兩種情況下,設置ComboBoxDisplayMember改爲「DisplayName」

1

這裏最簡單的方法是將一個屬性添加到該類型。如果這是發生(也許EF等),然後使用partial class

namespace Whatever { 
    partial class FinancialInstitution { 
     public string EntityCaption { 
      get {return "(" + EntityCode + ") - " + EntityNameDesc; 
     } 
    } 
} 

如果這是一個DataTable,你可以添加一個計算列。如果這是您控制範圍之外的類型,則可能使用(使用自定義類型描述符(通過TypeDescriptionProvider)直接執行此操作),但它非常困難。我不希望再封裝例如,添加直通模仿封裝類的屬性,並添加新的:

class MyShim { 
    private readonly FinancialInstitution inner; 
    public MyShim(FinancialInstitution inner) {this.inner = inner;} 
    public string EntityCode { get {return inner.EntityCode;}} 
    public string EntityNameDesc { get {return inner.EntityNameDesc;}} 
    public string EntityCaption { 
     get {return "(" + EntityCode + ") - " + EntityNameDesc; 
    } 
} 

並綁定到墊片來代替。