Datagridview modif

thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008 - 6 mars 2007 à 07:43
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 - 7 mars 2007 à 01:26
Bonjour,

J'ai un datagridview binder avec une liste d'objet (classe "Articles"). J'ai deux colonnes , un code et un libellé.
Ce datagridview est en modification, je peux ajouter ou modifier un ligne directement dans le grid.

Lorsque j'ajoute un nouvelle ligne, comment faire pour :
    - savoir que j'ajoute une nouvelle
    - contrôler que le code saisi n'existe pas déjà

Merci à tous

8 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 mars 2007 à 09:03
Salut

Pour savoir que tu ajoutes une nouvelle ligne... bah je pense que tu le sais non ? ;)
Il faudrait etre plus explicite sur ce que tu entends par là. Une solution a l'aveugle : Appeller tonDataTable.GetChanges avec DataRowState.Added en parametre. Si le DataTable ramené est null, pas de lignes ajoutées. Autrement, tu as un DataTable avec tes nouvelles lignes.

Pour la seconde question, il s'agit simplement d'un UniqueConstraint sur le DataColumn que tu souhaites unique

Mx
MVP C# 
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008
6 mars 2007 à 09:36
Je m'explique sur "savoir que j'ajoute une nouvelle ligne" :
J'ai 2 comportements à gérer, la modification d'un élément existant de mon datagridview et l'ajout d'un nouvel élément.
Pour la modification, je me suis abonné à  l'événement monBindingSource.CurrencerManager.ItemChanged pour savoir si un des éléments a été modifié.
      Si l'événement est déclenché, j'effectue une action  .

Pour l'ajout, lorsque je saisi une nouvelle valeur, l'évenement ItemChanged est déclenché mais avant d'effectuer la même action que pour la modification, je veux vérifier si l'élément existe déjà. C'est pourquoi je cherche à savoir s'il s'agit d'un nouvel élément.



Elément important à savoir, mon DataGridView n'est pas binder avec une DataTable mais avec une Collection d'objet. Je ne peux pas utiliser monDataTable.GetChanges


J'espère avoir été plus clair.


Merci


 


 




 
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 mars 2007 à 09:56
Ah oui en effet, alors le probleme est tout différent.
Du coup, si j'ai bien compris, en reussissant a savoir si une valeur existe deja ou non, ca solutionne ta premiere question ?

Ce que tu pourrais faire, c'est t'inscrire à l'evenement CellValidating de ton DatagridView. Dans cet evenement, tu vérifie la veleur entrée, et si celle-ci existe deja dans ta collection d'objet. Le cas échéant, e.Cancel = true; et tu préviens l'utilisateur.

Mx
MVP C# 
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 mars 2007 à 10:00
J'oubliais dans ma réponse : Tu peux t'inscrire à l'évenement AddingNew de ton BindingSource, et via la méthode de cet evenement, tu t'inscris à l'evenement CellValidating de ton DataGridView, puis tu t'en descinscris (Sauf si CellValidating peut t'arranger pour vérifier les colonnes que tu modifies)

Mx
MVP C# 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008
6 mars 2007 à 10:46
M'abonner à CellValidating via l'événement AddingNew, je n'y avais pas pensé, c'est vraiment très fort.
J'essaye ça dès ce soir et je pense que mon problème sera résolu ou tout du moins tu m'as donné une très bonne piste.
Merci
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008
6 mars 2007 à 11:05
Je viens de penser à une solution qui combiner avec la tienne règlerait totalement mon problème.
Je peux utiliser récupérer le datagridviewrow et tester la propriété IsNewRow.
Quand penses tu ?
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
6 mars 2007 à 11:09
A tester, mais ca devrait fonctionner.

Mx
MVP C# 
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
7 mars 2007 à 01:26
Salut
une solution tres efficace et qui te permettra d'avoir un meilleur control sur le datagridview (surtout que la ta source est une collection) est de créer par toi meme(par code) l'ensemble des colonnes,lignes et cellules avec les methodes permettant ajouter/modifier/supprimer/consulter une ligne (voir meme avec plusieurs surcharges),
de plus je n'ai pas tres bien compris ce que tu veux comparer pour voir si cela existe deja ou pas
mais l'evenement cellvaluechanged peut t'etre utile, il est declencher (et seulement) en cas modification de la valeur de cellule
les evenements de validation de la ligne rowvalidated peuvent te servir egalement,...

tu peux regarder la si tu es interesse un exemple de code >>
http://romagny13.over-blog.com/categorie-873872.html

++
0
Rejoignez-nous