Bonjour à tous,

J'avais posé ce post dans une mauvaise section, je copie ma demande ici (je vais fermer l'autre).

Problème on ne peut plus classique :

Une Form avec
- des Textbox bindés sur une table 'parent' de Clients : ça , ça roule
- Un Datagrid view qui Bind les 'enfants' des données maîtres (des contacts) : ça semble rouler aussi.

Le souci, que la source de données SQL enregistre les modifications enfants du Datagridview, et notamment les inserts qui ont besoin de champs cachés enfants, nécessaires pour le modèle relationnel enfants --> Parent.

1) LECTURE

Mon code actuel...

Chargement des données, une fois la connexion établie (Load de la Form):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
        StrSql = "Select TCLIENTS_CONTACTS.* From TCLIENTS_CONTACTS order by CCO_NOM Where CCO_IDCLI='" & IdMaitre & "';"
        ObjetCommand = New SqlCommand(StrSql)
        ObjetDataAdapter = New SqlDataAdapter(ObjetCommand)
        ObjetCommand.Connection() = ObjetConnection
        ObjetDataAdapter.Fill(ObjetDataset, "TCLIENTS_CONTACTS")
        ObjetDataTable = ObjetDataset.Tables("TCLIENTS_CONTACTS")
        MasterTemplate.DataSource = ObjetDataTable
Le lien se fait donc sur une données du code, idMaitre, qui conserve la valeur active de l'enregistrement maître. L'affichage du datagridview se fait juste via un filtre du Datagridview (ça, ça me gêne quelque part que je doive utiliser un filtre pour respecter un modèle relationnel)

Le Filtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
        If TXT0.Text Then IdMaitre = TXT0.Text
        MasterTemplate.FilterDescriptors.Clear()
        MasterTemplate.FilterDescriptors.Add(New FilterDescriptor("CCO_IDCLI", FilterOperator.IsEqualTo, IdMaitre))
Je récupère une valeur bindée en TextBox (TXT0 / Nom neutre pour pouvoir réutiliser facilement le code sur une autre form) de l'enregistrement maître, j'efface le filtre courant et je remet le bon.

2) MAJ du Datagrid

Je laisse l'UI du Databind opérer, çà roule à l'écran, en changeant d'enregistrement maître, les modifications sont conservées. Le propriétés du Datagrid semblent donc ok.

en Mise à jour Visuelle du Datagrid, tant que la session est ouverte :
- Les update sont corrects
- Les delete sont corrects.
- Les insert ça coince, ils ne sont pas visibles : Cause probable, la clé étrangère de l'enfant non renseignée (car cachée et ne devant pas être saisie) ne lie pas l'enfant au parent : SIC !!!.

3) Validation finale via un Bouton.

Les données modifiées du Datagridview ne sont pas persistantes. La base de données ne se met pas à jour automatiquement.
J'ai tenté plusieurs syntaxes. En vain.
La dernière :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
        ObjetDataAdapter.Update(ObjetDataset)
ramène l'erreur : Impossible pour Update de trouver TableMapping['Table'] ou DataTable 'Table'."

Donc deux soucis :
- insertion dans le datagridEnfant.
- Synchronisation du Datagarid avec la BDD

Des conseils?
Un bon tuto raté????
Un exemple de projet dispo sur le net?

Par avance merci pour les âmes charitables qui pourraient m'aider.