Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Impossible de modifier une propriété d'une colonne personnalisée d'un DataGridView

1 réponse
Avatar
Gilles TOURREAU
Salut tout le monde !

Je souhaite créer une colonne pour un DataGridView contenant des
DateTimePicker.
Pour cela j'ai pris l'exemple de Microsoft suivant :

http://whidbey.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_fxmclictl/html/e79a9d4e-64ec-41f5-93ec-f5492633cbb2.asp

J'ai ensuite crée une fenêtre dans Visual Studio 2005, j'ai ajouté un
DataGridView puis à l'intérieur une colonne de type "CalendarColumn" qui
s'appelle "colDate".
Je compilé, et je test, tout fonctionne sans problème.

Maintenant je voudrais rajouter une propriété dans la classe
"CalendarColumn".

J'ai écris pour cela dans la classe CalendarColumn :

/*-------------------------*/
public class CalendarColumn : .....
{
....
....
private string propTest;

public string PropTest
{
get { return this.propTest; }
set { this.propTest; }
}
}
/*-------------------------*/

Après je passe sous l'éditeur de Form de Visual Studio 2005.
J'ouvre la fenêtre d'édition des colonnes (Edit Columns) de mon
DataGridView.
Je clique à gauche sur "colDate".
A droite, je constate bien la présence, de ma nouvelle propriété "PropTest".
Je saisie alors une valeur pour cette propriété (par exemple "test").

Je ferme alors la fenêtre d'édition des colonnes.
Et je la rouvre de nouveau.
Je clique à gauche sur "colDate".
Je remarque que ma propriété "PropTest" contient aucune valeur.

De plus le Design Mode ne génère aucune ligne de code (dans le fichier
Form1.Designer.cs) pour ma propriété "PropTest".
Par contre si je modifie une propriété autre que celles dont j'ai crée (par
exemple .Width), celle-ci est bien sauvegardé et généré dans le code du
designer.

D'où provient ce problème de persistance des propriétés personnalisé ? Un
attribut que je n'aurais point vue ? Faut-il programmer une classe

En vous remerciant par avance de vos réponses...

Gilles TOURREAU

1 réponse

Avatar
Gilles TOURREAU
Je me réponds à moi-même si d'autres personnes on le même genre de
problème...

Pour résoudre ce problème, il faut redéfinir la méthode de clonage "Clone()"
afin que celle-ci puisse recopier les nouvelles propriétés.
En effet cette méthode est appelé par le Design-Time de Visual Studio lors
de l'édition des colonnes d'un DataGridView.

Un exemple de clonage pour la classe du post précédent :

public override object Clone()
{
CalendarColumn c;
c = (CalendarColumn)base.Clone();
c.PropTest = this.PropTest;
return c;
}

--
Gilles TOURREAU
Responsable Informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



"Gilles TOURREAU" a écrit dans le message de news:

Salut tout le monde !

Je souhaite créer une colonne pour un DataGridView contenant des
DateTimePicker.
Pour cela j'ai pris l'exemple de Microsoft suivant :

http://whidbey.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_fxmclictl/html/e79a9d4e-64ec-41f5-93ec-f5492633cbb2.asp

J'ai ensuite crée une fenêtre dans Visual Studio 2005, j'ai ajouté un
DataGridView puis à l'intérieur une colonne de type "CalendarColumn" qui
s'appelle "colDate".
Je compilé, et je test, tout fonctionne sans problème.

Maintenant je voudrais rajouter une propriété dans la classe
"CalendarColumn".

J'ai écris pour cela dans la classe CalendarColumn :

/*-------------------------*/
public class CalendarColumn : .....
{
....
....
private string propTest;

public string PropTest
{
get { return this.propTest; }
set { this.propTest; }
}
}
/*-------------------------*/

Après je passe sous l'éditeur de Form de Visual Studio 2005.
J'ouvre la fenêtre d'édition des colonnes (Edit Columns) de mon
DataGridView.
Je clique à gauche sur "colDate".
A droite, je constate bien la présence, de ma nouvelle propriété
"PropTest". Je saisie alors une valeur pour cette propriété (par exemple
"test").

Je ferme alors la fenêtre d'édition des colonnes.
Et je la rouvre de nouveau.
Je clique à gauche sur "colDate".
Je remarque que ma propriété "PropTest" contient aucune valeur.

De plus le Design Mode ne génère aucune ligne de code (dans le fichier
Form1.Designer.cs) pour ma propriété "PropTest".
Par contre si je modifie une propriété autre que celles dont j'ai crée
(par exemple .Width), celle-ci est bien sauvegardé et généré dans le code
du designer.

D'où provient ce problème de persistance des propriétés personnalisé ? Un
attribut que je n'aurais point vue ? Faut-il programmer une classe

En vous remerciant par avance de vos réponses...

Gilles TOURREAU