none
Tri multiple dans un DataGridView RRS feed

  • Question

  • Salut !

    En faisant un tri sur différentes colonnes, partant de la droite vers la gauche, la méthode de tri suivante ne marche pas :
    DataGridViewListe.Sort(DataGridViewListe.Columns(2), System.ComponentModel.ListSortDirection.Ascending)
    DataGridViewListe.Sort(DataGridViewListe.Columns(1), System.ComponentModel.ListSortDirection.Ascending)
    DataGridViewListe.Sort(DataGridViewListe.Columns(0), System.ComponentModel.ListSortDirection.Ascending)

    Après ces tris, la colonne (2) et la colonne (1) ne sont plus dans l'ordre. Seule la colonne (0) est bien triée. Y a-t-il un moyen pour faire un tri correcte ?

    Merci


    mercredi 30 mars 2011 21:33

Réponses

  • J'ai cru comprendre que "ds" était "DataSet" alors j'ai tranféré mon Dgv vers le DataSet. Cela marche mais ne créé pas de vraies lignes et cela fait planter tout le reste de mon programme. Je suis obligé d'effacer toutes les colonnes sinon, les infos se placent à droite des vraies colonnes.

    Dim ds As New DataSet
     ds.Tables.Add("Table0")
     ds.Tables(0).Columns.Add("Magasin")
     ds.Tables(0).Columns.Add("Catégorie")
     ds.Tables(0).Columns.Add("Article")
     ds.Tables(0).Columns.Add("Qte")
     ds.Tables(0).Columns.Add("Prix Unit.")
     ds.Tables(0).Columns.Add("Total")
     For I = 0 To DataGridViewListe.RowCount - 1
      ds.Tables(0).Rows.Add()
      For J = 0 To DataGridViewListe.ColumnCount - 1
        ds.Tables(0).Rows(I).Item(J) = DataGridViewListe.Rows(I).Cells(J).Value
      Next
     Next
     Dim dv As DataView = ds.Tables(0).DefaultView
     dv.Sort = "Magasin,Catégorie,Article"
     DataGridViewListe.Columns.Clear()
     DataGridViewListe.DataSource = dv
    

    J'ai trouvé une variante mais cela m'ajoute des lignes vierges :

     Dim ds As New DataSet
     ds.Tables.Add("Table0")
     ds.Tables(0).Columns.Add("Magasin")
     ds.Tables(0).Columns.Add("Catégorie")
     ds.Tables(0).Columns.Add("Article")
     ds.Tables(0).Columns.Add("Qte")
     ds.Tables(0).Columns.Add("Prix Unit.")
     ds.Tables(0).Columns.Add("Total")
     For I = 0 To DataGridViewListe.RowCount - 1
      ds.Tables(0).Rows.Add()
      For J = 0 To DataGridViewListe.ColumnCount - 1
        ds.Tables(0).Rows(I).Item(J) = DataGridViewListe.Rows(I).Cells(J).Value
      Next
     Next
     Dim dv As DataView = ds.Tables(0).DefaultView
     dv.Sort = "Magasin,Catégorie,Article"
     For I = 0 To ds.Tables(0).Rows.Count - 1
       DataGridViewListe.Rows.Add()
       For J = 0 To ds.Tables(0).Columns.Count - 1
        DataGridViewListe.Rows(I).Cells(J).Value = dv.Item(I).Row(J).ToString
      Next
     Next
    
    
    jeudi 31 mars 2011 21:49

Toutes les réponses

  • Bonjour,

     

     

     Dim dv As DataView = ds.Tables(0).DefaultView
      dv.Sort = "M_SIGN, DATE"
      DataGridView1.DataSource = dv
    
    

     

    J ai teste et cela fonctionne. (M_SIGN et DATE étant le nom de deux colonnes de mon dgv)

     

    Trouve dans ce topic:

    http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/03f5daf1-67fc-46ab-adb4-f0f0b6c9b9a7/

     

    Pj


    • Proposé comme réponse pjaaar jeudi 31 mars 2011 07:15
    jeudi 31 mars 2011 06:50
  • Merci pour ta réponse mais d'où vient le "ds"

    Dim dv As DataView = ds.Tables(0).DefaultView

    "ds" (non déclaré).  Je sais qu'il faut que j'associe mon Dgv à cela mais comment ?

    Ils s'appelle « DataGridViewListe » et pour mes colonnes j'ai mis :

    dv.Sort = "Magasin, Catégorie, Article"

    jeudi 31 mars 2011 20:47
  • J'ai cru comprendre que "ds" était "DataSet" alors j'ai tranféré mon Dgv vers le DataSet. Cela marche mais ne créé pas de vraies lignes et cela fait planter tout le reste de mon programme. Je suis obligé d'effacer toutes les colonnes sinon, les infos se placent à droite des vraies colonnes.

    Dim ds As New DataSet
     ds.Tables.Add("Table0")
     ds.Tables(0).Columns.Add("Magasin")
     ds.Tables(0).Columns.Add("Catégorie")
     ds.Tables(0).Columns.Add("Article")
     ds.Tables(0).Columns.Add("Qte")
     ds.Tables(0).Columns.Add("Prix Unit.")
     ds.Tables(0).Columns.Add("Total")
     For I = 0 To DataGridViewListe.RowCount - 1
      ds.Tables(0).Rows.Add()
      For J = 0 To DataGridViewListe.ColumnCount - 1
        ds.Tables(0).Rows(I).Item(J) = DataGridViewListe.Rows(I).Cells(J).Value
      Next
     Next
     Dim dv As DataView = ds.Tables(0).DefaultView
     dv.Sort = "Magasin,Catégorie,Article"
     DataGridViewListe.Columns.Clear()
     DataGridViewListe.DataSource = dv
    

    J'ai trouvé une variante mais cela m'ajoute des lignes vierges :

     Dim ds As New DataSet
     ds.Tables.Add("Table0")
     ds.Tables(0).Columns.Add("Magasin")
     ds.Tables(0).Columns.Add("Catégorie")
     ds.Tables(0).Columns.Add("Article")
     ds.Tables(0).Columns.Add("Qte")
     ds.Tables(0).Columns.Add("Prix Unit.")
     ds.Tables(0).Columns.Add("Total")
     For I = 0 To DataGridViewListe.RowCount - 1
      ds.Tables(0).Rows.Add()
      For J = 0 To DataGridViewListe.ColumnCount - 1
        ds.Tables(0).Rows(I).Item(J) = DataGridViewListe.Rows(I).Cells(J).Value
      Next
     Next
     Dim dv As DataView = ds.Tables(0).DefaultView
     dv.Sort = "Magasin,Catégorie,Article"
     For I = 0 To ds.Tables(0).Rows.Count - 1
       DataGridViewListe.Rows.Add()
       For J = 0 To ds.Tables(0).Columns.Count - 1
        DataGridViewListe.Rows(I).Cells(J).Value = dv.Item(I).Row(J).ToString
      Next
     Next
    
    
    jeudi 31 mars 2011 21:49
  • Bonjour, MicSoft,

     

    Pour quoi vous faites une copie dans un DataSet pour ce que vous avez déjà dans le contrôle DataGridViewListe ? Vous n’avez pas les infos affichées dans le DataGridView déjà dans un DataSet ?

     

    Si vous affichez les infos sans utiliser un DataSet, essayez une autre approche : construisez un DataSet avant d’afficher tout et puis, quand vous voulez trier la liste, il reste juste à obtenir le DataView de ce DataSet et modifier son attribut Sort.

     

    Bonne journée,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    mardi 5 avril 2011 11:07
  • Bojour,

    Je n'ai jamais utilisé de DataSet avec un DGV. Avec l'exemple de Pjaaar, le reste de mon programme ne fonctionnait plus parce qu'il n'y avait plus de vraies lignes. Il faudrait que je refasse toute la programmation avec le DataSet. J'ai pu corrigé mon erreur de lignes vierges en supprimant les lignes de mon DGV.

    A bientôt.

    mardi 5 avril 2011 16:12