OVH Cloud OVH Cloud

DataGrid WinForms et Validation

8 réponses
Avatar
TINANT Hervé [MVP .NET]
Salut tout le monde,

Voila je voudrais mettre de Validator sur une Datagrid Winforms, pour
pouvoir afficher un icone tout rouge (comme le fait le framework quand les
données ne respecte pas les contraintes du dataset)

Si qq un a une idée de génie

Merci d'avance.

--
TINANT Hervé (Alias CrazyHT)
MVP Visaul C#.NET

http://www.csharpfr.com
http://www.vbfrance.com

8 réponses

Avatar
Bonjour,

l'idée de géni je l'ai pas encore vu que j'ai quelque que questions a poser
et en plus je suis pas équipé en géni ;)

tu veux valider quels type de champs ? numérique, expression régulière ....

tu veux afficher l'icone rouge à quel endroit sur la datagrid ? dans la
cellule qui a l'erreur , en bout de ligne .....

si on affiche l'icone rouge dans la cellule cela doit il effacer son contenu
? par ce que sinon ça va être à l'étroit la dedans

si j'ai bien compris tu veux l'icone rouge comme on peut le faire avec les
Validator winforms qui clignote pour signaler le problème et sur onmouseover
affiche le texte de l'erreur ?

Sebastien
"TINANT Hervé [MVP .NET]" a écrit dans le
message de news:
Salut tout le monde,

Voila je voudrais mettre de Validator sur une Datagrid Winforms, pour
pouvoir afficher un icone tout rouge (comme le fait le framework quand les
données ne respecte pas les contraintes du dataset)

Si qq un a une idée de génie

Merci d'avance.

--
TINANT Hervé (Alias CrazyHT)
MVP Visaul C#.NET

http://www.csharpfr.com
http://www.vbfrance.com




Avatar
TINANT Hervé[MVP.NET]
wrote in
news::

Bonjour,

l'idée de géni je l'ai pas encore vu que j'ai quelque que questions a
poser et en plus je suis pas équipé en géni ;)

tu veux valider quels type de champs ? numérique, expression régulière
....

tu veux afficher l'icone rouge à quel endroit sur la datagrid ? dans
la cellule qui a l'erreur , en bout de ligne .....

si on affiche l'icone rouge dans la cellule cela doit il effacer son
contenu ? par ce que sinon ça va être à l'étroit la dedans

si j'ai bien compris tu veux l'icone rouge comme on peut le faire avec
les Validator winforms qui clignote pour signaler le problème et sur
onmouseover affiche le texte de l'erreur ?

Sebastien
"TINANT Hervé [MVP .NET]" a écrit dans
le message de news:
Salut tout le monde,

Voila je voudrais mettre de Validator sur une Datagrid Winforms, pour
pouvoir afficher un icone tout rouge (comme le fait le framework
quand les données ne respecte pas les contraintes du dataset)

Si qq un a une idée de génie

Merci d'avance.

--
TINANT Hervé (Alias CrazyHT)
MVP Visaul C#.NET

http://www.csharpfr.com
http://www.vbfrance.com










En fait, le type de validation en lui meme est peut important, disons
pour faire simple que je veux verifier que le champs n'est pas vide :)
Une fois que celui-ci fonctionnera j'implementerai les autres au besoin.

En fait je veux que l'icône apparaisse dans le RowHeader de la ligne
problematique. (oui je veux une icone rouge avec Tooltip)

Cordialement,

--
TINANT Hervé (Alias CrazyHT)
MVP Visaul C#.NET

http://www.csharpfr.com
http://www.vbfrance.com
Avatar
"TINANT Hervé[MVP.NET]" a écrit dans le
message de news:
wrote in
news::

> Bonjour,
>
> l'idée de géni je l'ai pas encore vu que j'ai quelque que questions a
> poser et en plus je suis pas équipé en géni ;)
>
> tu veux valider quels type de champs ? numérique, expression régulière
> ....
>
> tu veux afficher l'icone rouge à quel endroit sur la datagrid ? dans
> la cellule qui a l'erreur , en bout de ligne .....
>
> si on affiche l'icone rouge dans la cellule cela doit il effacer son
> contenu ? par ce que sinon ça va être à l'étroit la dedans
>
> si j'ai bien compris tu veux l'icone rouge comme on peut le faire avec
> les Validator winforms qui clignote pour signaler le problème et sur
> onmouseover affiche le texte de l'erreur ?
>
> Sebastien
> "TINANT Hervé [MVP .NET]" a écrit dans
> le message de news:
>> Salut tout le monde,
>>
>> Voila je voudrais mettre de Validator sur une Datagrid Winforms, pour
>> pouvoir afficher un icone tout rouge (comme le fait le framework
>> quand les données ne respecte pas les contraintes du dataset)
>>
>> Si qq un a une idée de génie
>>
>> Merci d'avance.
>>
>> --
>> TINANT Hervé (Alias CrazyHT)
>> MVP Visaul C#.NET
>>
>> http://www.csharpfr.com
>> http://www.vbfrance.com
>>
>>
>
>
>

En fait, le type de validation en lui meme est peut important, disons
pour faire simple que je veux verifier que le champs n'est pas vide :)
Une fois que celui-ci fonctionnera j'implementerai les autres au besoin.

En fait je veux que l'icône apparaisse dans le RowHeader de la ligne
problematique. (oui je veux une icone rouge avec Tooltip)

Cordialement,

--
TINANT Hervé (Alias CrazyHT)
MVP Visaul C#.NET

http://www.csharpfr.com
http://www.vbfrance.com




Pourquoi ne pas programmer un control perso qui étende les fonctionnalité de
RowHeader

un truc à creuser à mon avis dans le style

public class MonExtension : Control, IExtenderProvider

Cela permettrait de reprogrammer un control dans le style errorprovider mais
en l'attachant sur un rowheader tiens je vais essayer de voir si ça marche

après il te suffirat de le mettre sur ton formulaire comme errorprovider, de
paramètrer le seterror tu fais un fonction de validation dans le formulaire
qui test chaque ligne du dataset si une cellule est vide hop
moncontrol.seterror(this.datagrid1[Numligne], "attention erreur" ....)

enfin c le concept pas trop dégrossis mais c'est l'idée qui compte a mon
avis c'est la meilleur solution plutot que de vouloir surchager datagrid et
rowheader pour les personnaliser il est plus simple de faire un composant
capable d'étendre leurs fonctionnalité

Sebastien
Avatar
TINANT Hervé[MVP.NET]
>
Pourquoi ne pas programmer un control perso qui étende les
fonctionnalité de RowHeader

un truc à creuser à mon avis dans le style

public class MonExtension : Control, IExtenderProvider

Cela permettrait de reprogrammer un control dans le style
errorprovider mais en l'attachant sur un rowheader tiens je vais
essayer de voir si ça marche

après il te suffirat de le mettre sur ton formulaire comme
errorprovider, de paramètrer le seterror tu fais un fonction de
validation dans le formulaire qui test chaque ligne du dataset si une
cellule est vide hop moncontrol.seterror(this.datagrid1[Numligne],
"attention erreur" ....)



En Fait je pensais faire un IExtenderProvider pour etendre les
datagridColumnStyle mais ca marche pas, le controle gerer par le provider
est le datagrid tout ce qui se trouve à l'interieur n'est pas géré par le
IExtenderProvider. Je vais donc m'orienté vers la surcharge de
DataGridColumnStyle avec Validation :)

enfin c le concept pas trop dégrossis mais c'est l'idée qui compte a
mon avis c'est la meilleur solution plutot que de vouloir surchager
datagrid et rowheader pour les personnaliser il est plus simple de
faire un composant capable d'étendre leurs fonctionnalité



C'est aussi ce que je pense, il ne faut jamais réinventer la roue :p


Sebastien






Ah oui : DataRow.SetColumnError (macolonne,monerreur) pour un icone dans
la cellule
Et DataRow.RowError = monmsgerreur pour le mettre dans le header



--
TINANT Hervé (Alias CrazyHT)
MVP Visaul C#.NET

http://www.csharpfr.com
http://www.vbfrance.com
Avatar
J'ai lu la fin de ton post avec rowerror cela semble convenir seul truc
c'est des string pas des icones




"TINANT Hervé[MVP.NET]" a écrit dans le
message de news:

>
> Pourquoi ne pas programmer un control perso qui étende les
> fonctionnalité de RowHeader
>
> un truc à creuser à mon avis dans le style
>
> public class MonExtension : Control, IExtenderProvider
>
> Cela permettrait de reprogrammer un control dans le style
> errorprovider mais en l'attachant sur un rowheader tiens je vais
> essayer de voir si ça marche
>
> après il te suffirat de le mettre sur ton formulaire comme
> errorprovider, de paramètrer le seterror tu fais un fonction de
> validation dans le formulaire qui test chaque ligne du dataset si une
> cellule est vide hop moncontrol.seterror(this.datagrid1[Numligne],
> "attention erreur" ....)

En Fait je pensais faire un IExtenderProvider pour etendre les
datagridColumnStyle mais ca marche pas, le controle gerer par le provider
est le datagrid tout ce qui se trouve à l'interieur n'est pas géré par le
IExtenderProvider. Je vais donc m'orienté vers la surcharge de
DataGridColumnStyle avec Validation :)

> enfin c le concept pas trop dégrossis mais c'est l'idée qui compte a
> mon avis c'est la meilleur solution plutot que de vouloir surchager
> datagrid et rowheader pour les personnaliser il est plus simple de
> faire un composant capable d'étendre leurs fonctionnalité

C'est aussi ce que je pense, il ne faut jamais réinventer la roue :p

>
> Sebastien
>
>
>

Ah oui : DataRow.SetColumnError (macolonne,monerreur) pour un icone


dans
la cellule
Et DataRow.RowError = monmsgerreur pour le mettre dans le header



--
TINANT Hervé (Alias CrazyHT)
MVP Visaul C#.NET

http://www.csharpfr.com
http://www.vbfrance.com


Avatar
TINANT Hervé [MVP .NET]
En Fait c'est comme pour le ErrorProvider, tu set le texte d'explication de
l'erreur et lui affiche un icone et met le texte en ToolTip

Mais ce qui me chagrine c'est que je voulais pouvoir faire des validateurs
histoire de ne pas devoir modifier mes datastyle pour changer le type des
colonnes style.

(Suis Pas sur d'avoir etait clair sur ce coup)

TINANT Hervé (alias Crazyht)
MVP Visual C#.NET

http://www.vbfrance.com
http://www.csharpfr.com
a écrit dans le message de
news:
J'ai lu la fin de ton post avec rowerror cela semble convenir seul truc
c'est des string pas des icones




"TINANT Hervé[MVP.NET]" a écrit dans le
message de news:
>
> >
> > Pourquoi ne pas programmer un control perso qui étende les
> > fonctionnalité de RowHeader
> >
> > un truc à creuser à mon avis dans le style
> >
> > public class MonExtension : Control, IExtenderProvider
> >
> > Cela permettrait de reprogrammer un control dans le style
> > errorprovider mais en l'attachant sur un rowheader tiens je vais
> > essayer de voir si ça marche
> >
> > après il te suffirat de le mettre sur ton formulaire comme
> > errorprovider, de paramètrer le seterror tu fais un fonction de
> > validation dans le formulaire qui test chaque ligne du dataset si une
> > cellule est vide hop moncontrol.seterror(this.datagrid1[Numligne],
> > "attention erreur" ....)
>
> En Fait je pensais faire un IExtenderProvider pour etendre les
> datagridColumnStyle mais ca marche pas, le controle gerer par le


provider
> est le datagrid tout ce qui se trouve à l'interieur n'est pas géré par


le
> IExtenderProvider. Je vais donc m'orienté vers la surcharge de
> DataGridColumnStyle avec Validation :)
>
> > enfin c le concept pas trop dégrossis mais c'est l'idée qui compte a
> > mon avis c'est la meilleur solution plutot que de vouloir surchager
> > datagrid et rowheader pour les personnaliser il est plus simple de
> > faire un composant capable d'étendre leurs fonctionnalité
>
> C'est aussi ce que je pense, il ne faut jamais réinventer la roue :p
>
> >
> > Sebastien
> >
> >
> >
>
> Ah oui : DataRow.SetColumnError (macolonne,monerreur) pour un icone
dans
> la cellule
> Et DataRow.RowError = monmsgerreur pour le mettre dans le header
>
>
>
> --
> TINANT Hervé (Alias CrazyHT)
> MVP Visaul C#.NET
>
> http://www.csharpfr.com
> http://www.vbfrance.com




Avatar
Bonjour,

de toute façon pour valider la donnée a partir du errorprovider il faut une
fonction qui valide et qui dise au errorprovider l'erreur a afficher

en simplifié cela donne

public bool Validation()

if (condition)
return true
else
errorprovider.seterror(textbox,"erreur")
return false


un truc dans le genre mais le errorprovider n'est pas un validateur (au sens
par exemple des validator d'ASP) mais je pense que j'ai une solution a
proposer dans le style de ce que l'on utilise pour placer une zone de texte
au dessus d'une cellule de datagrid dans un application pocket pc

voilà le principe


on a la datagrid composé de ligne chaque ligne a un coordonnée X,Y pourquoi
ne pas faire un Extendeur (comme errorprovider) au moment du seterror il
prend un control , les coordonnées X,Y seront calculé ensuite

voilà le concept sous forme de fonction objet étant nécessaireement un
datagrid comme elle est passé en référence on connait la ligne sélectionné
qui pose problème

on connait la hauteur d'une ligne en pixel : Datagrid.PreferredRowHeight
on connait le point de départ de la datagrid : Datagrid.Bound.X et
Datagrid.bound.Y
on connait la ligne en erreur : Datagrid.CurrentRowIndex (Il faut
évidemment positioner le curseur sur la ligne d'erreur

on peut positionner notre errorprovider

monerrorprovider.x= Datagrid.Bound.X
monerrorprovider.yÚtagrid.Y+Datagrid.PreferredRowHeight*Datagrid.CurrentRo
wIndex


je sais jamais si le Y c'est ce qui fait le déplacement haut bas ou gauche
droite a chaque fois je test lol la je considère un haut bas ;)

voilà topo j'ai positionné mon alerte au bon niveau je pourrais même la
mettre au dessus de le bonne cellule attention d'ailleur à la notion de
premier plan et d'arrière plan

on peut imaginer un objet Validateur voilà sa fonction

Vérifie si une cellule de datagrid est vide

si oui renvoi les coordonnée X et Y a destination d'un Errorprovider

si non renvoi -1

il prend une datagrid en paramètre fait les tests et des qu'il trouve une
erreur stope le test on peut même imaginer des datagrid qui s'abonneraient
au validateur et l'appel après chaque changement

Tu trouve mes idées idiotes ? ou alors elles peuvent te servir

Sebastien






"TINANT Hervé [MVP .NET]" a écrit dans le
message de news:
En Fait c'est comme pour le ErrorProvider, tu set le texte d'explication


de
l'erreur et lui affiche un icone et met le texte en ToolTip

Mais ce qui me chagrine c'est que je voulais pouvoir faire des validateurs
histoire de ne pas devoir modifier mes datastyle pour changer le type des
colonnes style.

(Suis Pas sur d'avoir etait clair sur ce coup)

TINANT Hervé (alias Crazyht)
MVP Visual C#.NET

http://www.vbfrance.com
http://www.csharpfr.com
a écrit dans le message de
news:
> J'ai lu la fin de ton post avec rowerror cela semble convenir seul truc
> c'est des string pas des icones
>
>
>
>
> "TINANT Hervé[MVP.NET]" a écrit dans le
> message de news:
> >
> > >
> > > Pourquoi ne pas programmer un control perso qui étende les
> > > fonctionnalité de RowHeader
> > >
> > > un truc à creuser à mon avis dans le style
> > >
> > > public class MonExtension : Control, IExtenderProvider
> > >
> > > Cela permettrait de reprogrammer un control dans le style
> > > errorprovider mais en l'attachant sur un rowheader tiens je vais
> > > essayer de voir si ça marche
> > >
> > > après il te suffirat de le mettre sur ton formulaire comme
> > > errorprovider, de paramètrer le seterror tu fais un fonction de
> > > validation dans le formulaire qui test chaque ligne du dataset si


une
> > > cellule est vide hop moncontrol.seterror(this.datagrid1[Numligne],
> > > "attention erreur" ....)
> >
> > En Fait je pensais faire un IExtenderProvider pour etendre les
> > datagridColumnStyle mais ca marche pas, le controle gerer par le
provider
> > est le datagrid tout ce qui se trouve à l'interieur n'est pas géré par
le
> > IExtenderProvider. Je vais donc m'orienté vers la surcharge de
> > DataGridColumnStyle avec Validation :)
> >
> > > enfin c le concept pas trop dégrossis mais c'est l'idée qui compte a
> > > mon avis c'est la meilleur solution plutot que de vouloir surchager
> > > datagrid et rowheader pour les personnaliser il est plus simple de
> > > faire un composant capable d'étendre leurs fonctionnalité
> >
> > C'est aussi ce que je pense, il ne faut jamais réinventer la roue :p
> >
> > >
> > > Sebastien
> > >
> > >
> > >
> >
> > Ah oui : DataRow.SetColumnError (macolonne,monerreur) pour un icone
> dans
> > la cellule
> > Et DataRow.RowError = monmsgerreur pour le mettre dans le header
> >
> >
> >
> > --
> > TINANT Hervé (Alias CrazyHT)
> > MVP Visaul C#.NET
> >
> > http://www.csharpfr.com
> > http://www.vbfrance.com
>
>




Avatar
TINANT Hervé [MVP .NET]
YEEEEEEEEESSSSSSSSSSSSSSSS !!!!

C bon j'ai trouvé une astuce qui me convient :)

Devirer une classe de DataGricTextBoxColumn,
Gérer l'evenement de this.TextBox.Validating

Si validation pas ok : Set ErrorColumn dans la datarowview utilisée par le
datagrid

Et voila des zolies icones dans mon grid :)


--
TINANT Hervé (alias Crazyht)
MVP Visual C#.NET

http://www.vbfrance.com
http://www.csharpfr.com


a écrit dans le message de
news:
Bonjour,

de toute façon pour valider la donnée a partir du errorprovider il faut


une
fonction qui valide et qui dise au errorprovider l'erreur a afficher

en simplifié cela donne

public bool Validation()

if (condition)
return true
else
errorprovider.seterror(textbox,"erreur")
return false


un truc dans le genre mais le errorprovider n'est pas un validateur (au


sens
par exemple des validator d'ASP) mais je pense que j'ai une solution a
proposer dans le style de ce que l'on utilise pour placer une zone de


texte
au dessus d'une cellule de datagrid dans un application pocket pc

voilà le principe


on a la datagrid composé de ligne chaque ligne a un coordonnée X,Y


pourquoi
ne pas faire un Extendeur (comme errorprovider) au moment du seterror il
prend un control , les coordonnées X,Y seront calculé ensuite

voilà le concept sous forme de fonction objet étant nécessaireement un
datagrid comme elle est passé en référence on connait la ligne


sélectionné
qui pose problème

on connait la hauteur d'une ligne en pixel : Datagrid.PreferredRowHeight
on connait le point de départ de la datagrid : Datagrid.Bound.X et
Datagrid.bound.Y
on connait la ligne en erreur : Datagrid.CurrentRowIndex (Il faut
évidemment positioner le curseur sur la ligne d'erreur

on peut positionner notre errorprovider

monerrorprovider.x= Datagrid.Bound.X



monerrorprovider.yÚtagrid.Y+Datagrid.PreferredRowHeight*Datagrid.CurrentRo
wIndex


je sais jamais si le Y c'est ce qui fait le déplacement haut bas ou gauche
droite a chaque fois je test lol la je considère un haut bas ;)

voilà topo j'ai positionné mon alerte au bon niveau je pourrais même la
mettre au dessus de le bonne cellule attention d'ailleur à la notion de
premier plan et d'arrière plan

on peut imaginer un objet Validateur voilà sa fonction

Vérifie si une cellule de datagrid est vide

si oui renvoi les coordonnée X et Y a destination d'un


Errorprovider

si non renvoi -1

il prend une datagrid en paramètre fait les tests et des qu'il trouve une
erreur stope le test on peut même imaginer des datagrid qui s'abonneraient
au validateur et l'appel après chaque changement

Tu trouve mes idées idiotes ? ou alors elles peuvent te servir

Sebastien






"TINANT Hervé [MVP .NET]" a écrit dans le
message de news:
> En Fait c'est comme pour le ErrorProvider, tu set le texte d'explication
de
> l'erreur et lui affiche un icone et met le texte en ToolTip
>
> Mais ce qui me chagrine c'est que je voulais pouvoir faire des


validateurs
> histoire de ne pas devoir modifier mes datastyle pour changer le type


des
> colonnes style.
>
> (Suis Pas sur d'avoir etait clair sur ce coup)
>
> TINANT Hervé (alias Crazyht)
> MVP Visual C#.NET
>
> http://www.vbfrance.com
> http://www.csharpfr.com
> a écrit dans le message de
> news:
> > J'ai lu la fin de ton post avec rowerror cela semble convenir seul


truc
> > c'est des string pas des icones
> >
> >
> >
> >
> > "TINANT Hervé[MVP.NET]" a écrit dans


le
> > message de news:
> > >
> > > >
> > > > Pourquoi ne pas programmer un control perso qui étende les
> > > > fonctionnalité de RowHeader
> > > >
> > > > un truc à creuser à mon avis dans le style
> > > >
> > > > public class MonExtension : Control, IExtenderProvider
> > > >
> > > > Cela permettrait de reprogrammer un control dans le style
> > > > errorprovider mais en l'attachant sur un rowheader tiens je vais
> > > > essayer de voir si ça marche
> > > >
> > > > après il te suffirat de le mettre sur ton formulaire comme
> > > > errorprovider, de paramètrer le seterror tu fais un fonction de
> > > > validation dans le formulaire qui test chaque ligne du dataset si
une
> > > > cellule est vide hop moncontrol.seterror(this.datagrid1[Numligne],
> > > > "attention erreur" ....)
> > >
> > > En Fait je pensais faire un IExtenderProvider pour etendre les
> > > datagridColumnStyle mais ca marche pas, le controle gerer par le
> provider
> > > est le datagrid tout ce qui se trouve à l'interieur n'est pas géré


par
> le
> > > IExtenderProvider. Je vais donc m'orienté vers la surcharge de
> > > DataGridColumnStyle avec Validation :)
> > >
> > > > enfin c le concept pas trop dégrossis mais c'est l'idée qui compte


a
> > > > mon avis c'est la meilleur solution plutot que de vouloir


surchager
> > > > datagrid et rowheader pour les personnaliser il est plus simple de
> > > > faire un composant capable d'étendre leurs fonctionnalité
> > >
> > > C'est aussi ce que je pense, il ne faut jamais réinventer la roue :p
> > >
> > > >
> > > > Sebastien
> > > >
> > > >
> > > >
> > >
> > > Ah oui : DataRow.SetColumnError (macolonne,monerreur) pour un


icone
> > dans
> > > la cellule
> > > Et DataRow.RowError = monmsgerreur pour le mettre dans le


header
> > >
> > >
> > >
> > > --
> > > TINANT Hervé (Alias CrazyHT)
> > > MVP Visaul C#.NET
> > >
> > > http://www.csharpfr.com
> > > http://www.vbfrance.com
> >
> >
>
>