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 :

DataGridView, Trie, events & Ci


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut DataGridView, Trie, events & Ci
    Bonjour,

    Alors j'ai passer la journée à essayer de réaliser un trier pour mon datagridview quand je me suis rendu compte enfin de journée qu'il est possible de trier mes lignes en activant ou pas le SortMode et en clickant sur la colonne lorsque mon programme est activé :

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView1.Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
    Alors il sera impossible de trier les lignes par rapport a la colonne 0.

    Alors j'ai plusieurs questions:

    1) Comment savoir si un trie est activer ou pas pour pouvoir lancer mon trie personnel qui dépend de plusieurs conditions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DataGridView1.Columns(1).ReadOnly = False Then
                TrieBulleNiveauPriority()'Sub qui permet de réaliser un trie personnel
            End If
    Mon code ne fait rien !!

    2)J'ai réaliser un trie à bulle qui prend en compte qu'une seule condition, le niveau de priorité de mes alarmes qui se trouve dans la colonne 7 mais je voudrai prendre en comte d'autre condition, par exemple, si il y a deux alarmes de mêmes priorités alors elles seront trié par rapport à la date qui se trouve colonne 1. Quel algorithme il faut utiliser ?

    3)J'ai un souci avec des checkBox dans mon datagridview, lorsque je clic dessus, elle change de valeur visuel mais la valeur réel ne change pas, mon programme prend en compte que la valeur a changer que lorsque je clic sur un autre checkbox. Comment résoudre le probleme ?

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Comment savoir si un tri est activé ou pas?
    Dans un DataGridView non "bindé", il n'y pas d'indication de l'ordre de tri utilisé : le résultat d'un sort est simplement des lignes dans un ordre différent.
    Remarque : Même dans une dataGridView liée à un binding source, la propriété Sort du BindingSource ne reflète pas l'ordre de tri demandé en cliquant sur un en-tête de colonne.
    J'ai réaliser un trie à bulle qui prend en compte qu'une seule condition... Quel algorithme il faut utiliser pour 2 conditions?
    Faire porter la fonction de compare sur 2 champs au lieu d'un. Il faudrait voir le code utilisé pour être plus précis.
    la cellule change de valeur visuelle mais la valeur réel ne change pas,
    Utiliser ... Cells(j).EditedFormattedValue au lieu de ...Cells(j).Value.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Points : 94
    Points
    94
    Par défaut
    Bonjour,

    1) ne t'embête pas à détecter un tri de l'utilisateur, laisse le faire les tris qu'il veut, et ajoute un bouton qui tri ton datagrid comme tu le veux, qu'il utilisera à sa volonté.
    Par contre, je ne sais pas si tu te rends compte que là tu testes une propriété qui ne peut être définie que par toi (ton code) donc à moins d'avoir implémenté un contrôle utilisateur lui permettant de changer ce paramètre, ta condition n'est pas près de fonctionner.

    2) Là tu parles de regroupement, pas de tri, et ça un datagrid ne peut pas le gérer tout seul, c'est à toi de le faire. le code à utiliser pour réaliser ça dépend de la manière dont tu alimentes dont datagrid (source BDD, requête SQL, tableau de variables...) mais dans tous les cas, je crois que tu n'aurais pas d'auter choix que de faire ce regroupement toi même avec des tableaux de variables temporaires, mais je ne maîtrise pas trop ce sujet.

    3) Sur ce point, c'est très simple, quand tu cliques sur la checkbox, la cellule de ton datagrid prend le statut "en cours de modification" en quelque sorte, et ne le quiteras que quand tu auras cliqué sur une auter cellule ou un autre contrôle.

    Par ailleurs, je ne sais pas si tu as prévu ensuite d'enregistrer les modifications apportées dans ton datagrid et il faudrait que je retourne voir pour vérifier, mais je crois que tu as une propriété dans ton datagrid view qui autorise ou pas la mise ) à jours des informations. Si tu peux modifier les informations dans ton datagrid view, ça ne veut pas dire pour autant que ce dernier va mettre sa source à jour. Ce sont deux notions distinctes et c'est à toi qu'il incombe de les lier. Et sur ce point, tu as deux méthodes :
    - soit tu executes la mise à jour à chaque changement de valeur, auquel cas tu devras travailler avec l'événement valuechanged (et tu auras encore ce problème de mise à jour seulement quand tu selectionneras autre chose que la cellule en cours de modification)
    - soit tu laisses l'utilisateur faire toutes ses midifications et tu implémentes un bouton de validation, et même un bouton annulation qui rechergera ton datagrid à partir de la source non encore midifiée (c'est plus prudent)

    J'espère que ces quelques conseils te seront utiles, et n'hésite pas à demander de plus amples informations, on est là pour ça

    Bon Dev
    Pensez à mettre le topic en si votre problème a été solutionné. / Un petit est le bien venu si la réponse vous satisfait
    Ce qui mérite d'être fait mérite d'être bien fait.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    1) Pour résoudre ce problème, j'ai mi mon trie personnel sur un bouton et le problème est résolue !!

    2) Pour l'algorithme d'un trie a plusieurs conditions, j'ai regarde les conditions les plus prioritaire au moins prioritaire. J'ai réalisé un trie à bulle avec la condition la plus prioritaire, ensuite, j'ai réaliser a nouveau un trie à bulle avec la seconde condition la plus prioritaire seulement lorsque j'ai une égalité entre deux lignes par rapport à la condition la plus prioritaire. voila le code :


    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
    'Une procedure qui gere un trie selon le cahier de charge
        Public Sub TrieBulleNiveauPriority()
            Dim EnOrdre0 As Boolean = False
            Dim EnOrdre1 As Boolean = False
            Dim EnOrdre2 As Boolean = False
            'Trie par ordre de niveau de priorité
            While Not EnOrdre0
                EnOrdre0 = True
                Dim x As Integer
                For x = 1 To i - 1
                    If DataGridView1.Rows(x - 1).Cells(7).EditedFormattedValue < DataGridView1.Rows(x).Cells(7).EditedFormattedValue Then
                        InverserDeuxLignes(x)
                        EnOrdre0 = False
                    End If
                Next
            End While
            'Trie par ordre de niveau de priorité et acquittement
            While Not EnOrdre1
                EnOrdre1 = True
                Dim x As Integer
                For x = 1 To i - 1
                    If DataGridView1.Rows(x - 1).Cells(7).EditedFormattedValue = DataGridView1.Rows(x).Cells(7).EditedFormattedValue Then
                        If DataGridView1.Rows(x - 1).Cells(0).EditedFormattedValue = True And (DataGridView1.Rows(x).Cells(0).EditedFormattedValue = Nothing Or DataGridView1.Rows(x).Cells(0).EditedFormattedValue = False) Then
                            InverserDeuxLignes(x)
                            EnOrdre1 = False
                        End If
                    End If
                Next
            End While
            'Trie par ordre de niveau de priorité, acquittement et date
            While Not EnOrdre2
                EnOrdre2 = True
                Dim x As Integer
                For x = 1 To i - 1
                    If DataGridView1.Rows(x - 1).Cells(7).EditedFormattedValue = DataGridView1.Rows(x).Cells(7).EditedFormattedValue Then
                        If DataGridView1.Rows(x - 1).Cells(0).EditedFormattedValue = DataGridView1.Rows(x).Cells(0).EditedFormattedValue Then
                            If DataGridView1.Rows(x - 1).Cells(1).EditedFormattedValue < DataGridView1.Rows(x).Cells(1).EditedFormattedValue Then
                                InverserDeuxLignes(x)
                                EnOrdre2 = False
                            End If
                        End If  
                    End If
                Next
            End While
        End Sub
    J'ai crée plusieurs procédure tel que inverser deux lignes etc....
    L'algorithme est lui même dans une procédure, c'est possible de le retirer.

    3) Comme la dit Graffito, pour réssoudre ce probleme, j'ai fait :
    Utiliser ... Cells(j).EditedFormattedValue au lieu de ...Cells(j).Value.

    et utiliser Nothing au lieu de False pour savoir si une CheckBox est coché dans ma datagridview ou pas.

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

Discussions similaires

  1. DataGridView RowValueChanged Event
    Par zebrette dans le forum VB.NET
    Réponses: 0
    Dernier message: 13/04/2011, 15h38
  2. Datagridview validate event
    Par sinople dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/08/2010, 11h50
  3. Filtrer un DataGridView, sur quel Event ?
    Par dsolheid dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/01/2008, 15h04
  4. Question sur Event RowsRemoved de la dataGridView
    Par theMonz31 dans le forum C#
    Réponses: 3
    Dernier message: 18/12/2007, 08h16
  5. mettre un Event sur un DatagridView.ButtonColomn
    Par 2020 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 27/06/2007, 18h06

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