2010-09-15 17 views
2

J'ai un UserControl personnalisé qui contient plusieurs contrôles enfants, parmi lesquels un objet DataGridView. Je ne veux pas activer EnableDesignMode pour aucun des contrôles enfants, mais plutôt avoir exposé et sérialisé leurs propriétés selon les besoins. Je suis bloqué sur la propriété DataSource DataGridView. Dois-je créer un UITypeEditor personnalisé et utiliser la réflexion pour trouver tous les objets BindingSource sur le formulaire parent pour la sélection, ou puis-je en quelque sorte appeler l'éditeur intégré de ce type? Quel type est appelé par l'éditeur lors de la modification DataSource de DataGridView?Propriété DataSource de modification de dessin d'un objet DataGridView dans un contrôle UserControl

EDIT: En fait, la suggestion d'Oliver n'a pas fonctionné. J'ai obtenu la liste des objets bindables dans la grille de propriétés quand je sélectionne mon UserControl et après avoir choisi une source de liaison, des colonnes de dataset lié sont apparues sur la grille, mais les colonnes de datagridview ne sont pas sérialisées en designer.cs après avoir édité la collection Columns . Toutefois, si je crée un ParentControlDesigner et un EnableDesignMode personnalisés pour cette vue de données, je peux définir la liaison via DesignerVerb, puis la collection Columns est sérialisée après la modification.

J'ai exposé les colonnes de DataGridView et propriétés DataSource de cette manière

[Editor(typeof(CollectionEditor), typeof(UITypeEditor))] 
[Category("Grid")] 
//[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
public DataGridViewColumnCollection Columns 
{ 
    get { return dgvListaBaza.Columns; } 
} 

[AttributeProvider(typeof(IListSource))] 
[Browsable(true)] 
[Category("Grid")] 
public object DataSource 
{ 
    get { return dgvList.DataSource; } 
    set { dgvList.DataSource = value; } 
} 

Quelle est la différence entre la DataSource façon est définie lorsque je clique sur DesignerVerb natif du contrôle et celui à travers la propriété exposée? Les deux affichent les colonnes de la liaisonSource dans la grille après avoir choisi une liaison, mais les colonnes ne sont pas sérialisées dans ce dernier cas, comme s'il y avait quelque chose d'autre à définir lors de la définition de DataSource. De plus, l'attribut DesignerSerializationVisibility sur les colonnes exposées ne fait aucune différence, et les noms de colonne dans l'objet CollectionEditor sont différents selon la façon dont j'ai défini DataSource (s'il est défini par designerverb natif, ils sont nommés SomeColumnDataGridViewTextBoxColumn et s'il est passer par la propriété, la propriété Name de chaque colonne est vide).

Répondre

1

Jetez un oeil à DataSource for User Control.

+0

[AttributeProvider (typeof (IListSource))] a fait l'affaire! Merci. –

+0

En fait, pas tout à fait .. voir le montage s'il vous plaît. –