2009-12-15 7 views
2

J'ai un code de base de données de liste déroulante de base. J'ai besoin de modifier la source de données à l'exécution et insérer un nouveau champ. Je souhaite en fait ajouter un champ à la collection qui est une chaîne formatée de la description et du code. Comme ...Ajouter dynamiquement un champ à une collection dans C#?

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

puis

ddlPrimaryCarrier.DataTextField = "newField"; 

Quelle est la bonne façon de le faire? Puis-je faire une boucle dans la collection existante et créer une nouvelle liste de types anonymes avec le champ dont j'ai besoin? Quelqu'un at-il des exemples de comment faire cela?

Merci, ~ ck à San Diego

+0

Quel est le type d'institutions financières? –

+0

Quel type de datasource/liste/collection est FinancialInstitutions? Il peut être plus facile de concaténer le entitycode + entitydesc lorsqu'ils sont sélectionnés dans votre base de données. – ZimSystem

+0

var newDatasource = FinancialInstitutions.Select ( c => nouveau { Code = c.EntityCode, Description = string.Format ("({0}) - {1}", c.EntityCode, c.EntityNameDesc) }); Je suis allé avec cela et cela semble aller. – Hcabnettek

Répondre

0

En supposant que FinancialInstitutions est une collection de FinancialInstitution objets, ajouter une nouvelle propriété à votre classe FinancialInstitution:

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

Si c'est un DataTable, vous pouvez ajoutez une colonne calculée:

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

Dans les deux cas, définissez ComboBox de "DisplayName"

1

L'approche la plus simple ici consiste à ajouter une propriété au type. Si cela est généré (peut-être EF, etc.) puis utilisez un partial class:

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

Si cela est un DataTable, vous pouvez ajouter une colonne calculée. Si c'est un type en dehors de votre contrôle, il est possible de le faire (directement au type) en utilisant un descripteur de type personnalisé (via TypeDescriptionProvider), mais c'est très difficile. Je préfère plutôt à l'instance encapsuler, ajoutant pass-thru propriétés qui simulent la classe encapsulée, et en ajoutant la nouvelle:

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; 
    } 
} 

et se lier aux cales à la place.

Questions connexes