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 :

Petit souci de tri avec un DataGridView lié à un DataTable


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 29
    Points
    29
    Par défaut Petit souci de tri avec un DataGridView lié à un DataTable
    Bonjourà tous,

    J’utilise un DGV lié à un DataTable.

    Je saisis mes données dans certaines colones du DGV, j’effectue toutes mes opérations dans le DT après validation et ça s’affiche correctement dans d'autres colonnes du DGV.

    Jusque là, ça va…

    Jusqu’au moment où je décide de trier mon DGV sur une colonne autre que l’index des entrées. (par un clic en tête de colonne)

    Le tri s’effectue très vite et s’affiche correctement dans la grille mais dans le DT ça ne suit pas : L’ordre des lignes reste inchangé.

    (Si par exemple j’affiche les valeurs de la ligne 0 de la table sur la console ou dans un textbox, ça correspond à l’ancienne ligne 0 mais pas à la ligne désormais affichée dans la grille à l’index 0 après le tri.)

    J’ai essayé acceptchanges() mais (comme son nom ne l’indique pas) ça ne change rien…

    Moralité, après un tri, quand je veux modifier une valeur d'une ligne de ma grille et que ça ne me fasse pas les calculs pour une autre, je galère.

    Pour l'instant je consacre la 1ere colonne du DGV aux index d'entrée et après un tri, je vais chercher l'ordre de ma DataRow là dedans mais je suis sûr qu’il y a un moyen plus élégant qui consiterait après un tri à mettre les lignes du DT dans le même ordre que celles du DGV. Le problème a sans doute être déjà été soulevé mais je n’ai pas été fichu de trouver... (c'est ça les vieux, ça ne voit plus clair)

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    En effet le tri du DGV et de la table ne sont pas synchronisés (DGV utilise un datagridview sous-jacent)
    Utilise un bindingsource pour lier le DGV à la table ou dataview.
    Il possède les méthodes de maj et déplacement.
    - ligne courante du DGV est récupérée par : DGV.current(type datarowview)
    - pour la mise à jour de la table : DGV.update
    - Position courante : DGV.pos
    Soit tu mets à jour la table "à la main" en récupérant la ligne courante soit DGV.update met à jour automatiquement la table.
    Bon boulot Jean

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup, je vais essayer comme ça.

    Et en début de semaine je mets un petit "résolu" si j'arrive à mettre ça en musique (je ne pourrai m'y pencher que dimanche soir).

    En attendant, je garde encore la possibilité d'ajouter une question sur ce fil si par hasard je galère encore...

    Bon week-end et encore merci.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Bonsoir,

    J’en profite pour rajouter quelque mots (questions) parce que je n’ai pas encore mis « résolu »

    En fait il y a des trucs qui m’échappent.

    Par exemple, si j’intercale un BindingSource entre mon DataGridView et mon DataTable de façon à avoir le DataTable en Datasource du BindingSource et le BindingSource en Datasource du DataGridView, eh bien ça ne change pas le comportement de mon DataTable par rapport à avant (sans BindingSource), et je ne trouve toujours pas la méthode qui permet de ranger les lignes du DataTable dans l’ordre donné par le Tri de colonne du DGV.

    Si tu pouvais me donner un petit exemple de code, je suis preneur.

    Avec Dataview pris comme DéfaultView de ma table j’arrive à quelque chose d’à peu près correct, pour ça il faut que je trie mon DataView comme ma DataGridView sur l’évènement Sorted mais il faut que je remplisse ensuite ma datatable avec des données du DataView (DataTable1 = view.ToTable)

    Ca donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Private Sub DataGridView1_Sorted(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles DataGridView1.Sorted
            Dim Colonne As DataGridViewColumn = DataGridView1.SortedColumn
            Dim view As DataView = DataTable1.DefaultView
            Dim Sens As String = " ASC"
            If DataGridView1.SortOrder = SortOrder.Descending Then
                Sens = " DESC"
            End If
            view.Sort = (Colonne.HeaderText.ToString & Sens)
            DataTable1 = view.ToTable
        End Sub
    Le problème est qu’à ce moment là mon DGV n’est plus lié au datatable. Et si je veux que mes saisies ultérieures sur la grille se répercutent dans la table, il faut que je redéfinisse la source de données en rajoutant cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView1.DataSource = DataTable1
    Mais alors, je ne peux plus trier dans le sens descendant car ça réinitialise le sens du tri à chaque fois. Il faut donc que je rajoute une variable se souvenant de sens du tri précédent de chaque colonne et quelques lignes de code en plus…

    Bref, c’est encore tiré par les cheveux… et je reste toujours preneur de bons conseils.

    D'avance merci.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Il n'est pas possible de trier un datatable, il faut passer par un dataview.
    Si tu veux ta table triée comme le DGV, il faut utiliser un dataview trié sur la colonne du DGV.
    Voilà comment je fais pour afficher une table triée dans un DGV.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim BS As BindingSource  
      Dim DTAV as dataview                    
        DTAV = New DataView
        DTAV.Table = DS.table
        DTAV.Sort = "colonne ASC"
        BS.datasource = DTAV
        DGV.datasource = BS
    Pour les mises à jour de la table j'utilise les méthodes add, update, remove du bindingsource.
    Pour les mises à jour dans la BDR j'utilise des requêtes sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        BS.EndEdit()
         DTAV = New DataView
         DTAV.Table = DS.table
         DTAV.RowStateFilter = DataViewRowState.Added
          For Each DTARV In DTAV
           ... procédure de maj de la BDR
          next
    Bon boulot Jean

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Merci à toi pour ces conseils.

    Bonne soirée.

    Philippe

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

Discussions similaires

  1. petit soucis d'update avec reel
    Par psychosiffleur dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/02/2010, 14h04
  2. Réponses: 8
    Dernier message: 20/08/2008, 16h19
  3. Petits soucis de tri sur un vecteur
    Par d.jphilippe dans le forum Fortran
    Réponses: 3
    Dernier message: 01/08/2008, 23h00
  4. Petit soucie de sérialisation avec .net remoting
    Par teddyalbina dans le forum C#
    Réponses: 2
    Dernier message: 22/03/2008, 21h34
  5. [Zip] petit soucis de variable avec "zip.lib.php"
    Par Giantrick dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/06/2007, 12h19

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