thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
22 avril 2006 à 19:33
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
27 mai 2006 à 11:27
Bonjour,
J'ai une form maître/détail avec une textbox numéro de facture qui est "binder" avec une tableadapater.
Comment faire pour incrémenter automatique le numéro lorsque j'ajoute un enregistrement
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 22 avril 2006 à 20:11
Salut,
En fait, je pense qu'il faut plutot voir ca au niveau de ton DataTable, et plus précisement du DataColumn en question.
Tu dois avoir une propriété AutoIncrementa mettre a true;
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 23 avril 2006 à 10:23
Salut,
Merci pour ta réponse, mais la propriété AutoIncrement est déjà à True.
En fait, j'alimente mon détail (datagridview par une liste), pour la première tout va bien mais ensuite j'ai une exeception sur la clé étrangère car mon numéro de facture n'est incrémenté.
foreach (cSelectArticle
ListDataRow
in
listArticle)
Lors du deuxième AddNew() j'ai l'erreur suivante :
InvalidConstraintExecption "ForeignKeyConstraint FK_FATIC_FADTI a besoin des valeurs de clé enfant (0) dans la table parente."
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 23 avril 2006 à 12:03
Salut,
Un peu dur de voir le probleme comme ca. Tu es sur que c'est un probleme d'autoincrement ?
Ca ressemble plus a un probleme de clé etrangere qui n'existe pas et qui te pose donc probleme a cause de la contrainte d'integrité.
Je pense que si le probleme venait de la clé qui ne s'incremente pas, il te jeterait plutot parce que tu as un doublon.
D'ailleurs, y'a u truc que j'ai pas compris, tu essaies d'incrementer le numéro pour chaque ligne de ta facture ?
Enfin, la je te cache pas que c'est assez flou pour moi
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 23 avril 2006 à 16:05
Salut,
C'est vrai que en relisant c'est pas très clair.
Je vais reexpliquer :
J'ai une form avec une partie maître (l'entête de ma facture) composé de champ (textbox,...) et une partie détail composé d'un datagridview
Il existe un relation entre mon entête et le détail (avec une contrainte de clé étrangère sur le détail)
Quand je creer une nouvelle facture
Je créer l'entête avec :
this.fATICBinginsource.Addnew() avec FATIC correspondant à l'entête de la facture.
Puis après sélection des articles (par une autre form) j'alimente le datagridview avec le code décrit dans mon dernier post. (où FADTI correspond au détail de la facture)
Lorsque je fait un Addnew sur FADTI (détail), il me met une erreur car je pense qu'il n'a pas encore incrémenter le numéro de facture de l'entête.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 23 avril 2006 à 16:23
Salut,
Oui c'est plus clair ainsi :)
On va resumer et voir ce qui peut causer le plantage
Le AddNew sur l'entete de la facture marche. Donc a priori, tu as un numéro de facture bien incrémenté, c'est ca ? Tu as essayé de voir quelle etait la valeur prise par ce numéro ? et si tu ajoutes encore une facture, le n° est-il encore bon (bien incrementé) ?
On passe au detail :
A l'ajout d'une ligne dans le detail, ca plante, c'est ca ? Et a ce que j'ai compris, il te dit que le n° de facture pour une ligne n'existe pas dans la table maitre (j'ai pris comme hypothese que ton n° de facture etait ta clé etrangere).
As-tu verifié quelle valeur prenait cette clé? Normalement, il n'y a plus d'histoire d'incrementation a ce niveau la, puiqu'elle se faisait dans l'entete. Les lignes de ton detail doivent avoir le meme numéro de facture que leur entete.
Autre petite question, as tu essayé en appliquant la méthode SetParentRow() a tes DataRow de detail, en lui indiquant en parametre la Row parente ?
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 24 avril 2006 à 21:39
Salut,
Le Addnew() marche mais le numéro de facture n'est pas incrémenté, le champ textbox binder au numéro de facture prend 0 comme valeur (ce qui me laisse penser que la valeur n'est pas incrémenter et c'est ce qui pose problème).
En fait, ce que j'ai pas dit, c'est que si l'entête existe déjà, je peux ajouter des lignes de détail sans problème avec le même code que j'ai mis dans le poste plus haut.