Incrémentation automatique [Résolu]

Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Dernière intervention
19 janvier 2008
- 22 avril 2006 à 19:33 - Dernière réponse :
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Dernière intervention
19 janvier 2008
- 27 mai 2006 à 11:27
3
Merci
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();

Merci thorgal1612 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de thorgal1612
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
- 22 avril 2006 à 20:11
0
Merci
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#
Commenter la réponse de MorpionMx
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Dernière intervention
19 janvier 2008
- 23 avril 2006 à 10:23
0
Merci
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
Commenter la réponse de thorgal1612
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
- 23 avril 2006 à 12:03
0
Merci
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#
Commenter la réponse de MorpionMx
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Dernière intervention
19 janvier 2008
- 23 avril 2006 à 16:05
0
Merci
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
Commenter la réponse de thorgal1612
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
- 23 avril 2006 à 16:23
0
Merci
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#
Commenter la réponse de MorpionMx
Messages postés
117
Date d'inscription
dimanche 14 novembre 2004
Dernière intervention
19 janvier 2008
- 24 avril 2006 à 21:39
0
Merci
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...
Commenter la réponse de thorgal1612

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.