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 :

Tri dans un Datagridview


Sujet :

Windows Forms

Vue hybride

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut Tri dans un Datagridview
    Salut, ça fait un long moment que je cherche, et ça commence à me rendre fou.

    j'ai dut trouver une bonne dizaine de solutions mais aucune ne fonctionne !


    Je vous expose le problème :

    J'utilise un Datagridview ( vide ) et au chargement de form1, je lui donne pour source un Dataset.

    Je veux faire une ligne des plusieurs données et je veux pouvoir les classer dans l'ordre croissant ou non, mais ça ne fait absolument pas comme je veux

    Pour faire simple :

    -Au départ j'ai ça :



    - Je veux classer par ordre décroissant :


    C'est pas très très décroissant ( Vous pouvez remarquer que ça a classé d'après le premier caractère )

    J'ai lu des choses comme quoi on peut changer le mode de tri des commandes, mais ça ne fonctionne pas, et d'ailleurs je ne sais pas qu'est-ce que ça ferait ...

    Sinon j'ai tenté de faire une sorte de fonction de "tri à bulle" :


    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
      Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
            Dim Temp As Integer = DataGridView1.SortedColumn.Index
            Dim i As Integer = 0
            Dim Tamp As String
     
            While i < DataGridView1.Rows.Count
                If DataGridView1.Item(Temp, j).Value > DataGridView1.Item(Temp, j + 1).Value Then
                    Tamp = DataGridView1.Item(Temp, j + 1).Value
                    DataGridView1.Item(Temp, j + 1).Value = DataGridView1.Item(Temp, j).Value
                    DataGridView1.Item(Temp, j).Value = Tamp
                    i = 0
                End If
                i = i + 1
            End While
        End Sub
    J'ai put faire des erreurs, mais de toute façon on obtiens le même resultat qu'au début ...

    Sinon, l'ajout dans la base se fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewRow(7) = CLng(CDR(0)).ToString("#,#")
    j'ai essayé sans le séparateur de milliers mais ça fait pareil :

    Enfin bref, je commence à désespérer, pouvez vous m'aider à résoudre ce problème ?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    ca ne serait pas plus simple de trier la source ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut
    Je ne sais pas, disons que je débute un peu ... J'apprend sur le tas et les Datagrid, dataset et autres trucs dans le genre, j'ai un peu de mal avec ...

    Je vais me pencher sur ça, mais j'y ai pensé, mais quand il y aura genre 1000 lignes ( ou beaucoup plus, je ne sais pas encore ) dans ma dataset, ça ne risque pas de faire ramer à tout retrier puis ré-injecter dans le datagridview ?

  4. #4
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Ca prendras pareil car c'est le même mécanisme qui est mis en jeu.
    Lorsque tu lies un Datagridview à une source de donnée, tu lies en fait la grille avec un objet DataView qui est une représentation de ton jeu d'enregistrement. Que tu tries à l'aide des entêtes de colonnes ou le dataview par le code reviens à la même opération.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut
    d'accord je pense avoir saisi la nuance et j'ai également vu un schéma qui explique le lien entre les dataset, dataview et datatable.

    là je fais des test comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Button1_Click_3(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim dv As New DataView(DataSet1.Tables("table1"))
            dv.Sort = "test DESC"
            DataGridView1.DataSource = dv
        End Sub
    Mais ça fait exactement la même chose. Comment faire pour classer en précisant que ce sont des nombres à classer ?

  6. #6
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Bonjour.

    Tu ne pourra pas forcer simplement via un dataview le tri d'un champ de type texte comme ça...

    Tu ne peux pas par exemple faire un Dataview.sort("cdbl(Col1) desc") alors que cela marcherait dans la requête SQL de récupération des données.

    C'est normal, car tu es complétement déconnecté de la base et pour le tri, la méthode de comparaison qui s'applique est celle déduite du type en base --> ta colonne en base est de type texte, la comparaison sera une comparaison caractére par caractére (21 est supérieur à 112 par exemple) ...

    Pour faire ça, tu vas devoir créer une class implémentant IComparer pour cette colonne.

    C'est un peu lourd pour ça quand même !

    La vrai question est : pourquoi ta donnée est-elle de type texte en base alors qu'elle semble devoir contenir des nombres ?

    Cdt.

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/12/2010, 14h49
  2. Tri dans un datagridview
    Par solim dans le forum VB.NET
    Réponses: 4
    Dernier message: 23/09/2010, 14h43
  3. erreur lors d'un tri dans un datagridview
    Par nawake dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/02/2010, 15h40
  4. empecher le tri dans datagridview
    Par thierry007 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/04/2009, 17h08
  5. [C#]ordre de tri inversé dans un datagridview
    Par ClaudeBg dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2009, 17h26

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