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

VB.NET Discussion :

Liaison Datagridview et Datatable


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 24
    Par défaut Liaison Datagridview et Datatable
    Bonjour à tous,

    J'ai fait quelques recherches et je ne parviens pas à trouver remède à mon problème.

    Le but de ma démarche est de sauvegarder les données d'un datagridview, et de les modifier si besoin est.

    J'ai créé un datagridview dans mon Form.

    J'ai créé un dataset dans lequel j'ai une datatable.

    À l'ouverture du forme (load), je veux que le datatable remplisse le datagridview.

    J'ai mis un bouton "Sauvegarde". Je voudrais que le clic sauvegarde les données du datagridview dans le datatable.

    Je suis novice dans la manipulation des bases de données.

    Si vous avez un exemple de code simple à utiliser, je suis preneur.

    Il me semble qu'il faut un dataadapter entre le dgv et le datatable, mais je ne sais pas comment l'utiliser.

    Merci à vous.

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par gouroucky Voir le message
    À l'ouverture du forme (load), je veux que le datatable remplisse le datagridview.

    Pour ça il faut juste faire TonDGV.DataSource = TaDataTable
    Citation Envoyé par gouroucky Voir le message
    J'ai mis un bouton "Sauvegarde". Je voudrais que le clic sauvegarde les données du datagridview dans le datatable.

    [...]

    Il me semble qu'il faut un dataadapter entre le dgv et le datatable, mais je ne sais pas comment l'utiliser.
    Tu es sur la bonne voie.
    Tu as des infos sur ce post et un exemple VB sur MSDN

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 24
    Par défaut
    Merci pour la réponse.

    Apparemment, j'ai il y a plusieurs méthodes pour arriver au résultat.

    1ère méthode (qui fonctionne à part un truc):

    Depuis le dgv inséré dans mon form, je suis allé dans ses propriétés et en Datasource j'ai indiqué la table que je souhaitai lier.
    Dans les grandes lignes, le code donne un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Private Sub Form15_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
    ' ma table s'appelle Rugosité
    ' ma base de données s'appelles Tubes, d'où le dataset généré : TubesDataSet
     
    Me.RugositéTableAdapter.Fill(Me.TubesDataSet.Rugosité)
     
    End sub
    Ça fonctionne assez bien. Mon dgv charge les données de la table. Le problème survient lors de la sauvegarde. Lorsque j'ajoute des nouvelles données, pas de problème. Mais lorsque je modifie les données d'une ligne existante, il m'indique le message suivant :

    L'exception System.InvalidOperationException n'a pas été gérée
    Message=Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.


    Le code de mon bouton sauvegarde est celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Me.Validate()
            Me.RugositéBindingSource.EndEdit()
            Me.RugositéTableAdapter.Update(Me.TubesDataSet) ' c'est d'ici que vient le souci
     
        End Sub
    Mais voilà, J'aimerai bien accéder à mon dataset depuis n'importe quel Form (pour alimenter une ComboBox par exemple) en ouvrant une connexion SQL. Je me suis inspiré des codes existants. Le problème est qu'il n'arrive pas à me connecter à ma base. La base est de type SQL compact et est non chiffrée.

    Voilà mon code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Windows.Forms
     
    Public Sub Form14_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
         Dim strConnexion As String = "Integrated Security=SSPI;Persist Security Info=False;data source=localhost;initial catalog=Tubes"
     
            Dim oConnection As New SqlConnection(strConnexion) ' c'est ici qu'il dit que ça coince
            oConnection.Open()
     
            Dim oSqlDataAdapter As New SqlDataAdapter("select * from customers", oConnection)
     
            Dim oDataSet As New DataSet("TubesDataSet")
     
            oSqlDataAdapter.Fill(oDataSet, "Rugosité")
     
            With ComboBox1
                .DataSource = oDataSet.Tables("Rugosité")
                .DisplayMember = "Type"
     
            End With
     
    end sub
    Il m'indique l'erreur

    Impossible d'ouvrir la base de données "Tubes" demandée par la connexion. La connexion a échoué.
    Échec de l'ouverture de session de l'utilisateur 'blablabla'.


    Merci pour votre aide.

  4. #4
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par gouroucky Voir le message

    Mais lorsque je modifie les données d'une ligne existante, il m'indique le message suivant :

    L'exception System.InvalidOperationException n'a pas été gérée
    Message=Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.

    Est-ce que tes enregistrements de DataTable ont leurs clés primaires ?


    Citation Envoyé par gouroucky Voir le message

    Mais voilà, J'aimerai bien accéder à mon dataset depuis n'importe quel Form (pour alimenter une ComboBox par exemple) en ouvrant une connexion SQL. Je me suis inspiré des codes existants. Le problème est qu'il n'arrive pas à me connecter à ma base. La base est de type SQL compact et est non chiffrée.

    Voilà mon code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Windows.Forms
     
    Public Sub Form14_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
         Dim strConnexion As String = "Integrated Security=SSPI;Persist Security Info=False;data source=localhost;initial catalog=Tubes"
     
            Dim oConnection As New SqlConnection(strConnexion) ' c'est ici qu'il dit que ça coince
            oConnection.Open()
     
            Dim oSqlDataAdapter As New SqlDataAdapter("select * from customers", oConnection)
     
            Dim oDataSet As New DataSet("TubesDataSet")
     
            oSqlDataAdapter.Fill(oDataSet, "Rugosité")
     
            With ComboBox1
                .DataSource = oDataSet.Tables("Rugosité")
                .DisplayMember = "Type"
     
            End With
     
    end sub
    Il m'indique l'erreur

    Impossible d'ouvrir la base de données "Tubes" demandée par la connexion. La connexion a échoué.
    Échec de l'ouverture de session de l'utilisateur 'blablabla'.


    Merci pour votre aide.
    Pour ce qui est de l'accessibilité de ton DataSet à travers tes Forms, tu peux le passer en property.
    Pour ce qui est de l'échec à la connexion je ne sais pas, apparement tu passes par l'auth Windows c'est ça ? A toi de voir si les droits sont OK, et si oui alors ça doit être la connectionString qui doit être fausse ... http://www.connectionstrings.com/sql-server-compact/

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 24
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Est-ce que tes enregistrements de DataTable ont leurs clés primaires ?
    À la création de la DataTable je n'avais pas défini de clé primaire. Pourtant lorsque j'ai voulu modifier la première colonne avec une clé primaire ça voulait toujours pas accepter l'update lors de la modification d'une donnée.

    J'ai donc créé une nouvelle DataTable où j'ai attribué directement une clé primaire. Et là ça fonctionne parfaitement ! Donc merci !

    Citation Envoyé par _Ez3kiel Voir le message
    Pour ce qui est de l'accessibilité de ton DataSet à travers tes Forms, tu peux le passer en property.
    Pour ce qui est de l'échec à la connexion je ne sais pas, apparement tu passes par l'auth Windows c'est ça ? A toi de voir si les droits sont OK, et si oui alors ça doit être la connectionString qui doit être fausse ... http://www.connectionstrings.com/sql-server-compact/
    Pour la connexion à la BDD, j'utilisais le Je suis passé en en important
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Imports System.Data.SqlServerCe
    Lorsque je génère le programme la base est vide. Donc ça affiche rien. Par contre, lorsque j'ajoute manuellement des données à ma base depuis visual studio, et bah là j'ai bien mes données qui s'affichent ! Donc problème résolu !

    Merci pour vos conseils qui m'ont été fort utiles !

    Petite question en passant, n'est-ce pas plus judicieux de sérialiser un datagridview (en Xml) pour le stockage de données plutôt que de recourir à une base de données ?

  6. #6
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Je ne saurais trop te dire, je me sert très peu de la sérialisation ...
    Par BDD tu auras plus de possibilités pour faire évoluer ton appli par la suite, à l'inverse si elle n'est pas amené à évoluer et que la taille des données n'est pas trop conséquente, ce serait -peut-être- (pas sûr) plus léger à sérialiser.

    Egalement si ton appli vient à être centralisé par la suite, et que les données devront être exploitées conjointement par plusieurs utilisateurs, la BDD serait préférable.

    Et aussi pour plus tard l'export des données en différents formats ou la modification de ton modèle relationnel ...

    MAIS, n'étant pas un expert de sérialisation peut-être que ces défauts que j'ai pointés sont surmontable, mais pour moi la sérialisation des données(ainsi que ton DGV) est surtout pour des petites applis qui ne seront pas amenés à évoluer.

    Si quelqu'un qui est plus habitué que moi à la sérialisation souhaite me démentir et/ou apporter son expérience je l'invite à s'exprimer.

Discussions similaires

  1. [Débutant] remplir DataGridView apartir DataTable c#
    Par emna123 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 28/04/2014, 21h14
  2. probleme dans un datagridview et datatable
    Par jejemimi dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/05/2010, 19h25
  3. [VB.net] Modification DataTable par un DataGridView
    Par nico10gbb dans le forum Windows Forms
    Réponses: 11
    Dernier message: 05/10/2009, 17h38
  4. DatagridView et Datatable
    Par manzione_vb dans le forum VB.NET
    Réponses: 4
    Dernier message: 19/04/2007, 16h14
  5. Réponses: 8
    Dernier message: 23/08/2006, 10h59

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