2017-10-07 11 views
1

J'ai créé un UserControl avec la propriété DataSource. Le code est comme ceci:Contrôle utilisateur - Sélectionnez la valeur de la propriété dans une liste de noms de propriété de la source de données

public partial class MyUserControl : UserControl 
{ 
    public MyUserControl() 
    { 
     InitializeComponent(); 
    } 
    private object MyDataSource; 

    [Browsable(true)] 
    [System.ComponentModel.Bindable(true)] 
    [TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] 
    [Editor("System.Windows.Forms.Design.DataSourceListEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] 
    public object DataSource 
    { 
     get 
     { 
      return MyDataSource; 
     } 
     set 
     { 
      if (MyDataSource != value) 
       MyDataSource = value; 
     } 
    } 
} 

Maintenant, je peux sélectionner la valeur pour DataSource propriété d'une liste déroulante dans le temps de conception comme image montre:

DataSource property in properties pan

Maintenant, ce que je veux exactement est un autre propriété appelée DataColumn que lorsque DataSource a été défini sur DataTable, l'utilisateur peut sélectionner une de ces colonnes DataTable à partir d'une liste déroulante dans les propriétés pan au moment du design pour la valeur de propriété "DataColumn". Évidemment, lorsque DataSource a été modifié valeurs dans DataCol La baisse de UMN dans la liste déroulante doit être modifiée en conséquence

Répondre

1

Vous pouvez décorer votre propriété avec des attributs suivants:

[DefaultValue("")] 
[TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design")] 
[Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design", 
    typeof(System.Drawing.Design.UITypeEditor))] 
public string DataColumn{ get; set; } 

Dans le code ci-dessus, DataMemberFieldEditor est chargé de montrer la liste déroulante contenant les noms de propriétés à choisir.

De même, DataMemberFieldConverter est responsable de convertir None en chaîne vide lorsque vous sélectionnez None dans la liste déroulante.

C'est ainsi que fonctionne la propriété DisplayMember de ListControl. Vous pouvez jeter un oeil à son source code.

+0

Merci d'avoir répondu. Cela montre la propriété comme si je veux. mais comment puis-je remplir la zone de liste déroulante avec des valeurs correctes selon DataSource? – Moseyza

+0

Il suffit d'abord de choisir la valeur de la propriété DataSource, puis de sélectionner la valeur de la liste déroulante de formulaire de propriété DataColumn. –

+0

Oui! cela fonctionne correctement ... Merci – Moseyza