3 pièce(s) jointe(s)
VS2013 C# - TableAdapterManager.UpdateAll() : master/detail
Salut à tous,
Je viens d'exploser une première souris sur un problème que je n'arrive pas à résoudre (après y avoir passé 4 jours, et épluché des milliers de sites/forums...).
J'ai une base de données assez simple :
Pièce jointe 143246
Mon DataSet est bien en mode "mise à jour hiérarchique". Au niveau de mes adapter, j'ai bien coché la case "Actualiser la table de données" afin qu'il ajoute un "select" après le insert pour actualiser les PK. Concernant ma relation, elle est bien de type "relation + clé étrangère" avec une mise à jour en cascade pour la modification et la suppression.
Sur ma Windows Form, la procédure que j'ai employé est la plus basique possible :
- A partir de la fenêtre source de données, j'ai glissé ma table "documents" (en mode détails),
- Puis j'ai glissé ma table "documentslignes" (en mode datagridview)
Sur ma form, les éléments suivants se sont créés automatiquement :
- 2 BindingSource pour mes 2 tables (avec AllowNew à TRUE),
- Les 2 TableAdapter correspondants,
- Un TableAdapterManager,
- Un DataSet.
La source de mon DocumentsLignesBindingSource est bien DocumentsBindingSource avec comme DataMembert la clé étrangère qui le lie à la table Documents.
Au chargement de ma form, j'ai les lignes suivantes :
Code:
1 2 3
| this.documentSource.AddNew();
this.lignesSource.AddNew(); //Sans cette ligne, même problème
this.dComptaSQL.EnforceConstraints = false; //Sans cette ligne, même problème |
Et sur le clic de mon bouton "valider" :
Code:
1 2 3 4 5 6
| this.Validate();
this.documentSource.EndEdit();
this.lignesSource.EndEdit();
this.dComptaSQL.EnforceConstraints = true;
this.dComptaSQL.GetChanges(); //Rajouté en espérant arranger les choses, en vain
this.DataManager.UpdateAll(this.dComptaSQL); |
Jusque là : tout semble en ordre.
J'exécute maintenant la machine. J'obtiens la fenêtre suivante (avec "-1" dans les champs de clé, fonctionnement normal puisque les clés sont normalement alimentées par le TableAdapterManager) :
Pièce jointe 143241
En cliquant sur "Valider", le -1 au niveau de l'en-tête de ma form passe bien à "1". En revanche, les lignes disparaissent et le message suivant s'affiche :
Pièce jointe 143242
Et là, je me tape la tête contre le mur en espérant remettre les idées en ordre et trouver la solution...
Alors si quelqu'un de généreux passe par là, et souhaite secourir une âme charitable (et suicidaire), je lui en serai reconnaissant...
Merci ;)