Modifier une forme parent contenent un datagridview à partir d'une forme fille

cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015 - 15 août 2010 à 03:01
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015 - 17 août 2010 à 18:58
salut
je travaille avec vb.net 2005 avec une base sql server en utilisant une connexion ODBC
j'ai crée un datagridviem dans une forme de mon projet à partir d'une table de ma base.
ma tache consiste à ajouter des informations manquantes à une ligne (row) existant de la datagrid à partir d'une nouvelle forme du projet en insérant ces données à partir des textbox.
En d'autres termes j'ai une Form_mere avec un Datagridview (lié a une datatable ?) Contenant les lignes de ta table en Base. je sélectionne une ligne, et par exemple en cliquant sur un bouton, une Form_Fille apparait ne contenant que des Textbox. Il y a autant de Textboxs que de colonnes.
L'utilisateur mets a jour les données dans les textbox, puis clique sur un Bouton pour valider les changements.
Alors , j'ai réussi à préparer la forme fille à l'aide de
TextBox.Text=Form_Parent.DataGridView.Rows(Form_Parent.DataGridView.CurrentRow.Index).Cells(IndexColonneRecerchée).Value.ToStringa
' en répetant l'opération pour chaque TextBox
Mais je trouve des problèmes lors de la mise à jour de la table
en fait lorsque je mets
forme_parent.ObjetDataAdapter.Update(forme_parent.ObjetDataSet, "la_table")
le datagridview se mets à jours mais cela ne s'enregistre pas dans la base originale(la base sqlserver)
Est ce que quelq'un peut m'aider svp?
merci bien

10 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 août 2010 à 03:25
Cette ligne :

TextBox.Text=Form_Parent.DataGridView.Rows(Form_Parent.DataGridView.CurrentRow.Index).Cells(IndexColonneRecerchée).Value.ToString


Te permet d'afficher le contenu de la cellule dans le textbox correspondant dans ta feuille enfants. Tu peux déjà la raccourcir :

TextBox.Text=Form_Parent.DataGridView.CurrentRow.Cells(IndexColonneRecerchée).Value.ToString


En modifiant ce textbox, seule la valeur de celui-ci change, pas celle de la cellule. tu devras donc faire le chemin inverse.

 Form_Parent.DataGridView.CurrentRow.Cells(IndexColonneRecerchée).Value = TextBox.Text


Et ceci à la fermeture de ta feuille enfant.

A supposer que le DataGridView prenne cela comme un changement qui aurait été fait à la main. En suite tu appelles ta méthode Update, si le DataGridView a bien fait son boulot cela devrait fonctionner.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
15 août 2010 à 18:19
ça n'a pas marché
toujours le même problème, la mise à jours n'est effectuée qu'au niveau de la datagridview et non pas la table de la base de données
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 août 2010 à 18:55
C'est parce ce que ton DGV ne prend pas ça comme une saisie, il ne modifie pas la table associé.

Ce qu'il faudrait faire, c'est modifier la Source de données directement. Mais est-ce que le DGV se mettra à jour ?

Il faudrait que tu crée une colonne invisible dans ton DGV lié à la clé primaire de ta table. En suite tu récupère l'id de l'enregistrement en question grâce à :

Dim ID [As Type]= Form_Parent.DataGridView.CurrentRow.Cells(0).Value

Avec cette ID tu recherches la ligne correspondante dans ta table et tu la modifie directement.

Autre soluce possible, en passant par le BindingSource de ta feuille parent, en lian celui-ci à tes contrôles.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
16 août 2010 à 15:50
Avec cette ID comment je recherche la ligne correspondante dans la table pour la modifie directement. A vrai dire quelle ligne de code permet cette recherche ainsi que la modification de la base.
merci c'est gentil de m'aider
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
17 août 2010 à 02:47
Tu peux essayer un truc dans le genre :

Dim ID As Integer = Form_Parent.DataGridView.CurrentRow.Cells(0).Value

Dim MaTable As DataTable = Form_Parent.ObjetDataSet.Tables("la_table")
Dim Row As DataRow = MaTable.Rows.Find(ID)
If Row IsNot Nothing Then
   With Row
     .Item("Nom") = txtNom.Text
     .Item("Code") = txtCode.Text
   End With
End If

Form_Parent.ObjetDataAdapter.Update(MaTable)


@+

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
17 août 2010 à 04:35
l'exécution me génère l'exception suivante:La table n'a pas une clé primaire.
pourtant ma table liée à la base contient une clé primaire
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
17 août 2010 à 05:40
Dans ta requête SELECT, celle-ci est-elle sélectionné ? Si ce n'est pas le cas il faut modifier la requête SELECT :

SELECT * FROM MaTable

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
17 août 2010 à 16:03
oui elle est bien sélectionner
j'ai bien fait SELECT * FROM la_Table_de_la_base
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
17 août 2010 à 18:01
Ben c'est pas normal, t'es sur à 100% que tu as défini une colonne en tant que clé primaire ?

Autre chose que je n'avais pas vu :

avec une base sql server en utilisant une connexion ODBC


Pourquoi ODBC ? Pourquoi ne pas utiliser SqlClient ou SqlServerCE dans le cas d'une base locale ?

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_nahoulaa Messages postés 43 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 7 octobre 2015
17 août 2010 à 18:58
oui j'ai bien défini la colonne de la base sql server comme clé primaire
sinon pour l'ODBC c'était imposé par la société pour laquelle je prépare le projet.
0
Rejoignez-nous