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