IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.net] Modification DataTable par un DataGridView


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Par défaut [VB.net] Modification DataTable par un DataGridView
    Bonjour,

    Je developpe sous Visual Studio 2005 et j'ai commencé le VB.net il y a 3 jours.
    De ce fait, je suis encore un peu paumé parmi les DataTable, DataSet et autres DataAdapter
    J'ai reussi à remplir mon DataGridView suivant des choix effectués dans des ComboBox mais j'ai maintenant un souci.

    Je n'arrive pas à recuperer les données de mon DataGridView pour les inserer dans une DataTable avec une requete Update. Je precise que je ne dois pas modifier tous les champs de la DataTable et que dans mon DataGridView il y a des infos dont je n'ai pas besoin pour effectuer mes modifications. J'espere avoir été clair !

    Voila si quelqu'un pouvait m'aider ca serai cool

    Bonne soirée !

  2. #2
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    si tu as rempli ton datagrid avec un dataset, ta datatable est déjà remplie !

    le datagrid c'est une visu de ta datatable. Dans la requete de ton dataadapter, tu dois prendre la clé primaire de ta table et pour enregistrer les modifs de ton datagrid dans ta base, tu à juste cette ligne à mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dataadapter.update(dataset)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Par défaut
    Le truc c'est que dans mon DataGridView j'ai des champs venant de deux tables differentes.
    Je ne sais pas comment faire pour selectionner uniquement les champs modifiés et mettre à jour les bons champs de la bonne table.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Par défaut
    Je pense que pour les champs modifiés tu peux faire appel à l'event OnCellValueChanged.
    Ensuite à toi d'écrire tes propres requêtes paramétrées qui vont modifiés les tables de ta base de données.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Par défaut
    OK donc si j'ai bien compris le systeme, des qu'on a besoin de faire un SELECT ou un UPDATE qui ne porte pas sur tous les champs de la table, il faut ecrire ses propres requetes parametrées.

    C'est bien ca ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Par défaut
    Bon alors j'ai crée une requete parametrée, desormais j'ai une autre question.

    Voici l'appel à ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test2.UpdateLibModele(?, ?, Me.ComboMarques.Text.ToString)
    A la place des deux points d'interrogation il faut que je recupere pour l'un toutes les nouvelles valeurs de mon DataGridView et pour l'autre les valeurs qui ont été modifiées donc les anciennes.

    Je ne sais pas du tout comment faire. Merci de m'éclairer

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Par défaut
    Petit UP je n'ai toujours pas trouvé

    A vrai dire je sais meme pas si c'est possible de recuperer les infos que je veux dans une variable String.
    Je suis pour le moment bloqué à cause de ce probleme !

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Par défaut
    vu que ton dataGridView est alimenté par une datatable qui est elle même issue de plusieurs tables, le mieux est de gérer au cas par cas beaucoup plus que de tout gérer d'un coup.
    Par exemple, un DataTable possèdes les events OnRowChanged, OnRowDeleted et TableNewRow, tu crées en parallèles les commandes UpdateCommand, DeleteCommand et InsertCommand de ton DataAdapter afin que les changements apportés au DataTable soient effectués sur les tables sources de ta base de donnée.
    Sinon pour récupérer les nouvelles valeurs d'un coté et celles qui ont changé de l'autre, tu as la méthode GetChanges() qui te permet de récupérer les lignes modifiées de ton DataTable. Ensuite tu lui passes en argument l'état des lignes que tu veux récupérer via DataRowState qui contient les enums Added, Deleted et Modified si je me souviens bien.

    Par contre pour tout récupérer dans un String je ne vois pas trop le pourquoi.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 46
    Par défaut
    Tout d'abord merci de ton aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    strSQL = "SELECT M.Lib_Marque, LM.Lib_Modele, LV.Lib_Version FROM Version V, Lib_Modele LM, Lib_Version LV, Marque M WHERE M.Id_Marque=V.Id_Marque AND LM.Id_Modele = V.Id_Modele AND V.Id_Version = LV.Id_Version AND LM.Lib_Modele = '" & Me.ComboModeles.Text.ToString() & "' AND M.Lib_Marque = '" & Me.ComboMarques.Text.ToString() & "' ORDER BY LV.Lib_Version"
     
    Dim monDa As New SqlClient.SqlDataAdapter(strSQL, My.Forms.Form1.maConn)
    Dim maTable As New DataTable()
    monDa.Fill(maTable)
    dgvVoitures.DataSource = maTable
    dgvVoitures.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
    dgvVoitures.Columns("Lib_Marque").ReadOnly = True
    Voici en fait un exemple du remplissage de mon DataGridView.
    En fait je veux les mettre dans une String car c'est ce que je passe dans ma requete paramétrée. Lorsque je rentre des valeurs moi meme dans l'appel, la modification s'effectue bien donc la requete marche mais je ne sais pas comment l'appeller correctement.

    Et aussi le probleme c'est que les modifications ne doivent pas etre effectués dans la DataTable qui remplit le DataGridView mais dans une autre DataTable. Donc la requete paramétrée se situe dans le TableAdapter de la DataTable à modifier.

    Il me semble pas avoir trouvé de bout de code relatif à ca dans tous les tutoriaux que j'ai vus.
    En fait si quelqu'un pouvait me montrer un p'tit bout de code traitant ce probleme, ca serai vraiment cool, car je comprends pas trop bien.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 21
    Par défaut Update automatique
    Tu peux essayer avec un getupdatecommand,normalemnt meme si cela provient de plusieurs table,ça doit le faire

    Dim MaConnection As New SqlConnection
    Dim MonAdapterST As New SqlDataAdapter
    Dim MonCommandBuilderST As New SqlCommandBuilder(MonAdapterST)


    MaConnection.Open()
    MonAdapterST.UpdateCommand = CommmandBuilderST.GetUpdateCommand()
    MonAdapterST.Update(MonDatasetST, "SuiviTemps")
    MaConnection.Close()

    Essai tu verras!!

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Par défaut
    Bonsoir à tous !

    Désolé de déterrer ce vieux sujet

    Revenant sur VB après dix ans d'arrêt (je travaillais avec VB6), j'aimerais savoir s'il existe quelque part un site regroupant des tutoriels tout simples pour les grands débutants (genre mise à jour d'une base de données depuis un datagridview justement) ?

    J'ai bien téléchargé la plupart des cours dispo sur ce site (merci aux auteurs, au passage ), mais c'est encore un peu compliqué pour moi, je recherche du pas à pas, histoire de comprendre par moi-même...

    Là je progresse, mais vraiment à la vitesse d'un escargot !

    Merci d'avance.

  12. #12
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut
    Sur developpez l'on trouve de tres bon tutoriels sur le langage VB.net, est que tu a parcourrir le cour de Lasserre http://plasserre.developpez.com/cours/vb-net/.

    comme l'on dit souvent c'est en essayant que l'on comprend mieux donc ce que tu devrais faire c'est essayer de faire quelque chose et la ou tu est bloque tu fait un post sur le forum avec ton code si nécessaire.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/11/2011, 20h57
  2. [vb.net] Modification d'une winform pendant un traitement
    Par arnolem dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/11/2005, 18h16
  3. [VS2005][VB.Net] Custom Format dans un DataGridView
    Par Vonotar dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/11/2005, 08h15
  4. [VB.NET] modification fichier XML
    Par betaphp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/11/2005, 11h13
  5. [VB.NET] DataReader: case par case
    Par prem's dans le forum Windows Forms
    Réponses: 22
    Dernier message: 08/04/2005, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo