J'ai une classe comme ceci:Y at-il un attribut que je peux utiliser dans ma classe pour dire DataGridView ne pas créer une colonne pour elle lorsqu'elle est liée à une liste <MyClass>
private class MyClass {
[DisplayName("Foo/Bar")]
public string FooBar { get; private set; }
public string Baz { get; private set; }
public bool Enabled;
}
Lorsque je crée un List<MyClass>
et attribuer au DataSource
d'un DataGridView
, la grille me montre deux colonnes, "Foo/Bar" et "Baz". C'est ce que je veux arriver.
Cela fonctionne actuellement car Enabled est un champ, pas une propriété - DataGridView ne récupère que les propriétés. Cependant, c'est un hack sale.
Je souhaite également activer une propriété, mais je la cache toujours dans DataGridView.
Je sais que je peux supprimer manuellement la colonne après la liaison .. mais ce n'est pas idéal.
Existe-t-il un attribut similaire à DisplayName, avec lequel je peux marquer une propriété? Quelque chose comme [Visible(false)]
?
C'est drôle, à mes yeux [Bindable (false)] devrait fonctionner et Browsable (selon l'aide) ne définit que si une propriété est affichée dans le PropertyGrid. Mais Bindable (false) est ignoré par DataGridView. –
Je suis d'accord, mais après avoir lu (et relu) les lignes directrices de conception de cadre (http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756), j'ai constaté que les concepteurs didn ne suivent pas toujours leurs propres règles (et ont parfois fait des choses qui n'ont pas de sens). –
Tous ces contrôles utilisent 'System.ComponentModel.PropertyDescriptor' et utilisent donc la même logique pour inclure/exclure des membres. Les classes 'ComponentModel' sont personnalisables, mais cela est rare car c'est tellement de travail. –