thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
6 mars 2007 à 07:43
romagny13
Messages postés687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 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à
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 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
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 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
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 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.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 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#
Vous n’avez pas trouvé la réponse que vous recherchez ?
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 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
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 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 ?
romagny13
Messages postés687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 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,...