2009-02-27 10 views
4

Je souhaite être en mesure d'afficher dans une grille de propriétés une liste déroulante qui affiche une valeur de "chaîne" mais renvoie une valeur "int"..Net PropertyGrid DropDownList - valeur de retour différente de la valeur d'affichage

Par exemple, laisser l'ensemble je suis arrivé cette classe:

public class MyObjectOptions : StringConverter 
{ 
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
    { 
     return true; 
    } 

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     MyObjectCollection mm = new MyObjectCollection(); 

     List<String> names = new List<String> 
     foreach (MyObject m in mm) 
     { 
      m.Id // Need to store this somewhere ... 
      names.Add(m.Name); 
     } 

     return new StandardValuesCollection(name); 
    } 

    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) 
    { 
     return true; 
    } 
} 

Voici mon utilisation de classe dans le contrôle PropertyGrid

public class MyObjectProperty 
{ 
    [TypeConverter(typeof(MyObjectOptions))] 
    public int Id 
    { 
     get { return this.id; } 
     set { this.id = value; } 
    } 
} 

Comme vous pouvez le voir, je veux stocker l'id du objet, mais je veux montrer son nom dans la liste déroulante ... J'essaie d'utiliser une hashtable mais ça ne fonctionne pas ...

BTW - J'utilise la version 3.5 de .Net mais je n'utilise que WinForm (pas WPF).

Répondre

2

Vous ne pouvez pas utiliser GetStandardValues ​​pour cela. Cette méthode serait utile si vous deviez limiter vos valeurs entières à 1, 5 et 10.

Si vous souhaitez afficher les chaînes dans la valeur de votre propriété, il vous suffit de remplacer les méthodes ConvertTo et ConvertFrom de votre TypeConverter . PropertyGrid utilisera les chaînes converties dans la liste déroulante. A propos de votre hashtable, vous pouvez le stocker dans votre TypeConverter si son contenu est statique. Si c'est dynamique, le mieux est de laisser l'instance cible de la grille la gérer. À partir de votre convertisseur, vous pourrez y accéder via la propriété TypeDescriptorContext.Instance.

Espérons que ça aide.

Questions connexes