Meilleur auteur de réponses
comment utiliser un DataAdapter.update(DataTable)

Question
-
Bonjour,
J'ai trois tables A, B, C dans une base de données Access avec un champ 'a' en commun. J'établie une connexion OleDbConnection, et j'affiche par le biais d'un OleDBAdapter et la méthode fill sur une DataTable l'ensemble des données des mes tables dans une DataGridView en utilisant des requètes SQL de style :
string requete = "Select * from A,B,C Where A.a =B.a and B.a = C.a and A.a = C.a" où a est ma clé étrangère.
Ceci se fait sans problème.
Par contre quand j'essaie de faire les mises à jour de mes tables à partir de la dataTable = (DataTable)DatagridView.DataSource, là les ennuis commencent. Puisque je ne sais pas avec quelle table de ma base faut lier mon DataAdapter de mise à jour.
Quelqu'un aurait la gentillesse de me donner des pistes à ceuser pour que je puisse mettre à jour mes tables de données en utilisant une seule DataGridView.
Merci.
Réponses
-
Je crois qu’il n’est pas possible le faire d’une manière directe avec un appel de la méthode Update d’un DataAdapter et il faut utiliser une mise à jour personnalisée. Pour ça vous pouvez, par exemple, utiliser un objet BindingSource (voir « Comment : lier des données au contrôle DataGridView Windows Forms ») et puis l’évènement BindingSource_CurrentItemChanged . Autres méthodes pour déterminer les modifications apportées sur une certaine ligne peuvent être trouvées sur ce lien : http://www.codeproject.com/KB/database/DataGridView2Db.aspx .
Finalement, vous pouvez aussi déterminer les lignes modifiées dans votre DataGridView et pour chaque ligne vous pouvez faire l’update.
Notez que pour toutes ces solutions il faudra savoir exactement l’ordre de vos colonnes et à quelle tables appartiennent-elles.
Cordialement,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
- Proposé comme réponse Link.frEditor vendredi 21 octobre 2011 23:49
- Marqué comme réponse Ciprian Duduiala mardi 25 octobre 2011 06:16
Toutes les réponses
-
Bonjour,
J'ai essayé avec une de mes tables (login) et cela fonctionne bien comme ceci:
private void Form1_Load(object sender, EventArgs e) { // TODO: cette ligne de code charge les données dans la table 'myDatabase1DataSet.login'. Vous pouvez la déplacer ou la supprimer selon vos besoins. this.loginTableAdapter.Fill(this.myDatabase1DataSet.login); } private void button1_Click(object sender, EventArgs e) { dataGridView1.DataSource = loginBindingSource; dataGridView1.Update(); }
fred on youTube
HTML Document Creator on codeplex
fred -
Je crois qu’il n’est pas possible le faire d’une manière directe avec un appel de la méthode Update d’un DataAdapter et il faut utiliser une mise à jour personnalisée. Pour ça vous pouvez, par exemple, utiliser un objet BindingSource (voir « Comment : lier des données au contrôle DataGridView Windows Forms ») et puis l’évènement BindingSource_CurrentItemChanged . Autres méthodes pour déterminer les modifications apportées sur une certaine ligne peuvent être trouvées sur ce lien : http://www.codeproject.com/KB/database/DataGridView2Db.aspx .
Finalement, vous pouvez aussi déterminer les lignes modifiées dans votre DataGridView et pour chaque ligne vous pouvez faire l’update.
Notez que pour toutes ces solutions il faudra savoir exactement l’ordre de vos colonnes et à quelle tables appartiennent-elles.
Cordialement,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
- Proposé comme réponse Link.frEditor vendredi 21 octobre 2011 23:49
- Marqué comme réponse Ciprian Duduiala mardi 25 octobre 2011 06:16