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 [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut Liaison datagridview et datatable
    je souhaite lier une datagridview (quant_dtg) à une datatable (mat_tot) appartenant à un dataset(datas).

    Je charge le tout au démarrage de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Quantitatif_Placo_form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Quant_dtg.DataSource = datas
            Quant_dtg.DataMember = "mat_tot"
     
    end sub
    Au démarrage, la datatable est vide. Mais lorsque je la remplis via une autre procédure, les lignes de la datagridview sont crées mais ne se remplisse pas.

    Pourquoi?

    par avance merci pour vos commentaires et solutions.

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Une solution pourri c'est de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Quant_dtg.DataSource = nothing
      Quant_dtg.DataSource = datas
    Quand tu ajoutes des lignes dans ta datatable.

    Sinon tu peux essayer de mettre un DataBind au milieu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Quant_dtg.datasource = me.DataBind1
    me.DataBind1.Datasource = datatable
    Et de tenter des

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dDGV.Refresh
    Databind1.refresh
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour la réponse mais ça ne marche.

    les lignes sont bien créées mais toujours vides.

    Une autre suggestion???

  4. #4
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Laquelle ne marche pas ?
    As tu essayer de Binder ?

    et est ce que ton DGV est contenu dans un control ? (panel, TabControl ...)
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Sans plus de code, ça va être dur de dire quelque chose de plus.

    Ce que mactwist a proposé fonctionne. Donc...
    Kropernic

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Les deux solutions de ne fontionnent pas.

    J'ai également essayer avec un databindingsource.

    Sinon OUI ,la datagridview est contenu dans une tab! Cela change quelque chose?

  7. #7
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par tom_plaquiste Voir le message
    Les deux solutions de ne fontionnent pas.

    J'ai également essayer avec un databindingsource.

    Sinon OUI ,la datagridview est contenu dans une tab! Cela change quelque chose?
    Voir mon message précédent...
    Kropernic

  8. #8
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Oui, Il y a toujours des problèmes d'affichage de DGV avec les tabcontrols...

    Tu peux tenter un TabPage.refresh, ou je crois sinon, juste après le Bind, il faut faire une sélection manuelle du TabPage en question, pour forcer le rafraîchissement du TabPAge :

    TabControl.SelectTabPage (nom tabpage)
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Je vais essayer d'apporter plus de précisions:

    J'ai une datagridview (quant_dtg) qui se situe dans un tabcontrol(quantitatif_tab).

    Au démarrage de l'application , je demande d'attribuer une datatable (mat_tot) ,appartenant à une datasource (datas) à ma datagridview. Pour cela, j'utilise une databinding source (bs1)

    ce qui donne en code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Quantitatif_Placo_form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
    'Création table Matériel total
            table = datas.Tables.Add("mat_tot")
            table.Columns.Add("Type", Type.GetType("System.String"))
            table.Columns.Add("Référence", Type.GetType("System.String"))
            table.Columns.Add("Dimension", Type.GetType("System.String"))
            table.Columns.Add("Nombre", Type.GetType("System.String"))
     
     
            Quant_dtg.DataSource = Me.bs1
            Me.bs1.DataSource = datas.Tables("mat_tot")
    Dans la suite de mon application, j'ai une procédure (add_row_matos) qui ajoute ou supprime des lignes dans ma datatable (mat_tot).

    J'ai vérifié que ma datatable contenait bien des données une fois la procédure (add_row_matos) exécutée.

    La dessus, la datagridview a créé le nombre de lignes correspondantes à l'ajout dans la datatable mais les cellules de ma datagridview ne contiennent aucune valeur.

    Voila


    Si quelqu'un a une idée je suis preneur.

    Si vous souhaitez davantage de code, je peux vous en donner mais il faudrait spécifier ce que vous aimeriez car le code complet est très long

    Merci à tous

  10. #10
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Tu peux nous confirmer que juste après l'ajout de ligne dans la datatable, si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    binding.datasource = Nothing
    binding.datasource = datatable
    Ca change rien ?

    Et sinon, une fois que le DGV créer les lignes, si tu changes de Tab et reviens, ça ne change rien ?

    Faut jouer un peu, tourner autour, voir ce qui bloque....
    tu peux te mettre aussi un bouton sur ta form, qui fera des refresh sur les binding/DGV/tabpage/tabcontrol/form, voir si l'un de ceux la fonctionne.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    J'ai tout essayé mais rien n'y fait (cf code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
            Me.Refresh()
            bs1.DataSource = Nothing
            bs1.DataSource = datas.Tables("mat_tot")
            Quantitatif_tab.Refresh()
            Projet.Refresh()
     
     
        End Sub
    Je ne comprends pas.
    D'autres idées??

    Je peux toujours créer une routine qui remplisse la datagriview en "manuelle" à partir de ma datatable. Mais si je peux éviter d'alourdir le code pour rien ça m'arrange.

  12. #12
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Tu as le droit de chercher des idées aussi...

    PAr exemple, sur le forum VB.NET, sur cette même page, il y a pas une semaine :

    http://www.developpez.net/forums/d15...ge-tabcontrol/
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Par hasard j'ai testé le chargement manuel de la datagridview avec le code suivant:

    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
     
    Private Sub charge_table(dgv As DataGridView, table As DataTable)
     
            Dim i, j, row_table, col_table As Integer
     
     
            row_table = table.Rows.Count - 1
            col_table = table.Columns.Count - 1
     
            For i = 0 To row_table
                For j = 0 To col_table
                    dgv(j, i).Value = table(i)(j)
                Next j
            Next i
     
        End Sub
    J'ai inséré cette procédure de façon dynamique dans mon code après que j'ai créé mes lignes dans ma table. Toujours rien !!! ca ne marche toujours pas!!!


    Mais , lorsque je crée un bouton, que j'assigne cette fonction à ce bouton et que je clique su ce bouton, comme par magie, ça marche !!!!

    Est ce que cela vous éclaire? et auriez vous des idées d'exploration??


    Pour ma part je continue de chercher....

  14. #14
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    C'est une histoire de Paint....

    As tu regardez le lien que je t'ai donné ?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Oui j'ai regardé le lien mais ca ne marche pas non plus (suspendlayout et resumelayout)


    Une histoire de paint ????? je suis en train de chercher sur msdn mais je ne comprends pas tout

  16. #16
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Tu as mal lu le post.... LE suspendLayout, c'était juste pour ne pas montrer que le programme change d'onglet, pour faire afficher les lignes du DGV...
    Relis le post.

    Car c'est un problème des événements "Paint" de Visual Studio, qui a du mal à gérer qui est peint quand, surtout dans les tabcontrols.
    Il en oubli des bous.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Avez vous d'autres idées?

    Je ne comprends pas pourquoi cela ne marche pas

  18. #18
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Quand on utilise un BindingSource, il faut l'accord du "cerbere" BindingSource (qui veuille au grain sur la mise à jour des controls "pieds & poings lies" c.à.d bindes à lui )....
    Et on utilise sa prop List qui est une "Vue Lie" correspondand à la datable lie actuellement...

    code exemple ou en plus j'ai ajoute un 2eme dgv lie directement à la datatable (espion):

    code .vb
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Public Class Form2
        Private myDataSet As New DataSet
        Private bds As New BindingSource
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            myDataSet = GetDS()
            bds.DataSource = myDataSet
            bds.DataMember = myDataSet.Tables(0).TableName
            DataGridView1.DataSource = bds
            '-------------------
            dgvPrevDataTable.DataSource = myDataSet.Tables(0)
     
        End Sub
        Private Function GetDS() As DataSet
            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim dc As DataColumn
     
            dc = New DataColumn("Nom", GetType(String))
            dt.Columns.Add(dc)
            dc = New DataColumn("Prenom", GetType(String))
            dt.Columns.Add(dc)
            dc = New DataColumn("Age", GetType(Integer))
            dt.Columns.Add(dc)
     
            Dim dr As DataRow = dt.NewRow
     
            For i As Integer = 1 To 10
                dr(0) = "itemNom" + i.ToString
                dr(1) = "itemPrenom" + i.ToString
                dr(2) = i * 11
                dt.Rows.Add(dr)
                dr = dt.NewRow
            Next
            ds.Tables.Add(dt)
            Return ds
        End Function
        Private Sub btnAddDataRow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddDataRow.Click
     
            Dim view As DataView = bds.List
     
            Dim dv As DataRowView = view.AddNew
            dv(0) = "newNom"
            dv(1) = "newPrenom"
            dv(2) = 25
     
            lbl1.Text = view.Count.ToString
        End Sub
     
        Private Sub DataGridView1_RowsAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
            lbl2.Text = e.RowCount.ToString
        End Sub
     
     
    End Class
    bon code...

+ Répondre à la discussion
Cette discussion est résolue.

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. Liaison Datagridview et Datatable
    Par gouroucky dans le forum VB.NET
    Réponses: 5
    Dernier message: 29/08/2013, 14h04
  3. probleme dans un datagridview et datatable
    Par jejemimi dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/05/2010, 19h25
  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