2009-08-30 5 views
1

Eh bien, ma question est un peu stupide, mais j'ai essayé beaucoup de chose différente sans résultat. J'ai un ComboBox dans mon formulaire principal et je veux pointer sa source de données vers la liste publique PriceChanges en lecture seule déclarée dans la classe Filters. Pas de problème avec ça mais je veux lister le champ Description.Afficher le contenu du champ spécifique de liste dans un ComboBox (C#)

J'ai essayé d'attribuer la chaîne "Description" à l'attribut DisplayMember sans succès. Mon ComboBox listes uniquement: "BusinessLogic.PriceChange" pour chaque entrée, où BusinessLogic est le nom de mon espace de noms et PriceChange la classe.

J'apprécie toute aide.

Cordialement

Cela fait partie du code de ma forme principale

public mainFrm() 
    { 
     InitializeComponent(); 

     prodFilter = new Filters(); 
     cbPriceChanges.DataSource = prodFilter.PriceChanges; 
     cbPriceChanges.DisplayMember = "Description" 
    } 

C'est fait partie du code qui déclare la liste objet

public enum PriceChangeTypes 
{ 
    No_Change, 
    Increased, 
    Decreased, 
    All 
} 

public class PriceChange 
{ 
    public String Description; 
    public readonly PriceChangeTypes Type; 

    public delegate bool ComparisonFuntionDelegate(Decimal a); 
    public readonly ComparisonFuntionDelegate ComparisonFunction; 

    public PriceChange(String Description, PriceChangeTypes type , ComparisonFuntionDelegate CompFunc) 
    { 
     this.Description = Description; 
     Type = type; 
     ComparisonFunction = CompFunc; 
    } 
} 

public class Filters 
{ 

    public readonly List<PriceChange> PriceChanges = null; 

    public Filters() 
    { 
     PriceChanges = new List<PriceChange>(); 

     PriceChanges.Add(new PriceChange("No Change", PriceChangeTypes.No_Change, PriceChange => PriceChange == 0)); 
     PriceChanges.Add(new PriceChange("Increased", PriceChangeTypes.Increased, PriceChange => PriceChange > 0)); 
     PriceChanges.Add(new PriceChange("Decreased", PriceChangeTypes.Decreased, PriceChange => PriceChange < 0)); 
     PriceChanges.Add(new PriceChange("All", PriceChangeTypes.All, a => true)); 
    } 
} 
+1

description, le type, ComparisonFuntionDelegate et La fonction ComparisonFunction doit être privée ou transformée en propriétés. –

Répondre

1

Avez-vous essayé de faire « Description » une propriété? Cela changera beaucoup au cas où la liste essaye d'obtenir le champ par réflexion (comme c'est probablement le cas).

public class PriceChange { 
    public string Description{ 
     get; 
     set; 
    } 
    // ... 
} 
+0

Parfait, c'est ça, je pense que je dois approfondir mes compétences sur la façon dont cette chose se comporte en interne. Cheers mate – Andres

+0

Heureux que ça a aidé :) –

0

Essayez d'ajouter ceci à votre classe:

public override string ToString() 
     { 
      return Description; 
     } 

Actuellement, vous êtes juste la valeur par défaut de ToString, qui est l'espace de noms d'objets et de classe

Questions connexes