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] Mise à jour d'un datagrid


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut [VB.net] Mise à jour d'un datagrid
    Bonjour à tous,

    Sur une form, j'ai un datagrid que je remplis au travers de oleDB:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private ds As New DataSet
        Private con As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & LireINI("Files", "path_access") & "\dep.mdb")
        Private da As OleDb.OleDbDataAdapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     'Remplissage du datagrid avec les données de la table access
            da = New OleDb.OleDbDataAdapter("select * from services", con)
            Dim dc As New OleDb.OleDbCommand
            dc.CommandText = "select * from services"
            da.UpdateCommand = dc
            da.Fill(ds)
            DataGrid1.DataSource = ds.Tables(0)
            'Blocage des fonctions ajout et édition du datagrid
            Dim cm As CurrencyManager = Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember)
            Dim dv As DataView = CType(cm.List, DataView)
            dv.AllowNew = False
            dv.AllowEdit = False
    Une des colonnes affichées est un compteur (champ number ds la base)
    En sélectionnant une ligne et en appuyant sur un bouton, je voudrais remettre à zéro ce champs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            'Remettre le compteur à zéro
            Dim i As Integer
            For i = 0 To ds.Tables(0).Rows.Count - 1
                If DataGrid1.IsSelected(i) Then
                    Dim strRequest = "UPDATE services SET cpt = 0 WHERE service = '" & DataGrid1.Item(i, 0) & "'"
                    oRecordSet = oConnection.Execute(strRequest)
                End If
            Next i
             da.update()
             DataGrid1.Refresh() 
        End Sub
    Malheureusement mon affiche n'est pas actualisé. Je ne vois pas trop ce qu'il manque pour que ma mise à jour soit visible. Si je ferme et réouvre l'écran, le changement est bien affiché.

    Merci d'avance pour vos réponses.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  2. #2
    Membre confirmé Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Bonjour

    Il me semble que ton problème vient de ton UpdateCommand. En effet tu mets ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dc.CommandText = "select * from services"
    da.UpdateCommand = dc
    ... cela signifie que ta commande update de ton dataadapter exécute une requête select...

    Lorsque tu utilises un DataAdapter tu dois user de "Fill" pour remplir tes DataTables. Or, si effectivement tu le fais bien lors de l'initialisation, ce n'est pas le cas dans ta méthode Button2_Click. Tu lances un da.update() sans signifier la table à updater...

    Je te conseille plutôt un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    da.Fill(ds) 
    DataGrid1.Refresh()
    comme précédemment.

    Cordialement

    Christophe
    Christophe B.

  3. #3
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            'Remettre le compteur à zéro
            Dim i As Integer
            For i = 0 To ds.Tables(0).Rows.Count - 1
                If DataGrid1.IsSelected(i) Then
                    Dim strRequest = "UPDATE services SET cpt = 0 WHERE service = '" & DataGrid1.Item(i, 0) & "'"
                    oRecordSet = oConnection.Execute(strRequest)
                End If
            Next i
            'Remplissage du datagrid avec les données de la table access
            da.Fill(ds)
            DataGrid1.Refresh()
    En fait, si je fais ca, il ajoute exactement les même données à mon datagrid, à la suite des précédentes.
    Je dois a mon avis d'abord vider le DG (comment faire?) et ensuite réafficher les données. Par contre il ne met pas à jour ce fameux champs.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGrid1.SetDataBinding(Me.ds, Me.ds.Tables(0).TableName)
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Je viens d'essayer le databinding mais ca ne semble pas vouloir s'améliorer.
    Le datagrid n'est pas mis à jour.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  6. #6
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Personne n'a d'idée? J'ai beau retourner le problème dans tous les sens, je n'obtient jamais le résultat escompté...

    J'aurais imaginé que l'update d'une datasource réexécute la command SQL qui lui est liée. Et donc ensuite, un refresh du datagrid met à jour les données selon mon DS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     'Remettre le compteur à zéro
            Dim i As Integer
            For i = 0 To ds.Tables(0).Rows.Count - 1
                If DataGrid1.IsSelected(i) Then
                    Dim strRequest = "UPDATE services SET cpt = 0 WHERE service = '" & DataGrid1.Item(i, 0) & "'"
                    oRecordSet = oConnection.Execute(strRequest)
                End If
            Next i
            da.Update(ds)
            Me.DataGrid1.SetDataBinding(ds, ds.Tables(0).TableName)
            DataGrid1.Refresh()
    Dans mon code, je fait l'update au travers d'un recordset connecté. Le fait de ne pas fermer la connection et / ou le recordset entre mes refresh oleDB peut-il être la cause de mon problème?
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  7. #7
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    J'ai utilisé oleDB pour toutes mes requêtes mais ca ne change rien finalement.
    Je n'arrive toujours pas à mettre à jour dynamiquement le contenu du datagrid.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Integer
                For i = 0 To ds.Tables(0).Rows.Count - 1
                    If DataGrid1.IsSelected(i) Then
                        Dim strRequest = "UPDATE services SET cpt = 0 WHERE service = '" & DataGrid1.Item(i, 0) & "'"
                        Dim oledbCommand As New OleDb.OleDbCommand(strRequest, con)
                        oledbCommand.ExecuteNonQuery()
                    End If
                Next i
                da.Update(ds.Tables("services"))
                DataGrid1.DataSource = ds.Tables("services")
                DataGrid1.Refresh()
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  8. #8
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    UP

    Pas d'idée?
    Voici le code complet de ma form, si quelqu'un voit ou ca cloche...


    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
    Public Class frm_gestion_dep
        Inherits System.Windows.Forms.Form
     
        Private ds As New DataSet
        Private con As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & LireINI("Files", "path_access") & "\E_dep.mdb")
        Private da As OleDb.OleDbDataAdapter
     
        Private Sub frm_gestion_dep_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Try
                'MakeTableStyle()
                'Remplissage du datagrid avec les données de la table access
                con.Open()
                da = New OleDb.OleDbDataAdapter("select * from services", con)
                da.Fill(ds, "services")
                DataGrid1.DataSource = ds.Tables("services")
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                'Sauvegarder les modifications
                Dim cm As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(da)
                da.Update(ds.Tables("services"))
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Try
                'Remettre le compteur à zéro
                Dim i As Integer
                For i = 0 To ds.Tables(0).Rows.Count - 1
                    If DataGrid1.IsSelected(i) Then
                        Dim strRequest = "UPDATE services SET cpt = 0 WHERE service = '" & DataGrid1.Item(i, 0) & "'"
                        Dim oledbCommand As New OleDb.OleDbCommand(strRequest, con)
                        oledbCommand.ExecuteNonQuery()
                    End If
                Next i
                da.Update(ds.Tables("services"))
                DataGrid1.DataSource = ds.Tables("services")
                DataGrid1.Refresh()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    End Class
    Merci.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  9. #9
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    En attendant mieux,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataGrid1.Item(i, 2) = 0
    C'est pas le top mais on fera avec....

    Merci.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  10. #10
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    heu...ton problème vient du fait que tu ne met jamais au courant la datasource de la grid des changements...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    da = New OleDb.OleDbDataAdapter("select * from services", con) 
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
    da.InsertCommand = cb.GetInsertCommand();
    da.UpdateCommand = cb.GetUpdateCommand();
    da.DeleteCommand = cb.GetDeleteCommand();
    Datatable dt = new Datatable();
    da.Fill(dt);
    DataGrid1.datasource = dt;
    Tu bind ensuite un textbox à la bonne colonne de ta datatable...
    Les modifications faites dans ton texbox seront répercutés dans ta datatable...
    reste plus qu'a faire
    pour envoyer les modifs en base...

  11. #11
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    merci beaucoup, ca fonctionne bien comme ca
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

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

Discussions similaires

  1. [VB.NET] mise à jour datagrid
    Par piro dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/12/2006, 16h54
  2. [VB.NET] Mise à jour application
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/11/2006, 16h07
  3. [VB.NET] Mise à jour d'un site à partir d'une application
    Par boulete dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/04/2006, 12h15
  4. [VS2003][VB.NET]Mise à jour DataSet d'une grille (erreur)
    Par m-mas dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/02/2006, 10h41
  5. Mise à jour d'un datagrid
    Par devZorro dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/10/2005, 19h00

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