Incrémentation automatique

Résolu
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008 - 22 avril 2006 à 19:33
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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

Merci pour votre aide

7 réponses

thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008
27 mai 2006 à 11:27
Je sais pas si va servir mais j'ai trouvé voilà ce que je fait pour ne plus avoir l'erreur

this.fATICBindingSource.EndEdit();  J'ajoute cette ligne avant l'appel de ma form de sélection pour ne plus avoir l'erreur

frmSelectPrestation FormSelPrestation = newfrmSelectPrestation();
FormSelPrestation.MdiParent = this.MdiParent;
FormSelPrestation.SelectPrestation += newfrmSelectPrestation.SelectPrestationEventHandler(FormSelPrestation_SelectPrestation);

FormSelPrestation.Show();
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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;



Mx
MVP C#
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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)


{



MonDataSet.
GSARTRow Article = (
MonDataSet.
GSARTRow)
this.gsartTableAdapter1.GetDataByCode(ListDataRow.Gsart_cod).Rows[0];



decimal montantTtc = Article.GSART_PRXVEN * ListDataRow.Gsart_qte;



int index = ExistProduit(ListDataRow.Gsart_cod);



if (index == -1)


{




fADTIBindingSource1.AddNew();


index = fADTIBindingSource1.Position;


}


fADTIDataGridView.Rows[index].Cells[
"FAART_COD"].Value = ListDataRow.Gsart_cod;


fADTIDataGridView.Rows[index].Cells[
"FAART_REF"].Value = Article.GSART_REF;


fADTIDataGridView.Rows[index].Cells[
"FADTI_QTE"].Value = ListDataRow.Gsart_qte;


fADTIDataGridView.Rows[index].Cells[
"FADTI_TYP"].Value =
"A";


fADTIDataGridView.Rows[index].Cells[
"FADTI_PRX"].Value = Article.GSART_PRXVEN;


fADTIDataGridView.Rows[index].Cells[
"FADTI_MNTTTC"].Value = montantTtc;


fADTIDataGridView.Refresh();


}

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."

Merci
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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#
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
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.

Voilà, j'espère que c'est un peu 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
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 ?



Mx
MVP C#
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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.

Je sais plus trop quoi faire...
0
Rejoignez-nous