none
Trier colonne DataGridView en cliquant sur son en-tête

Toutes les réponses

  • Bonsoir Bernard,

    Ces liens vous seront très utiles : 

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    vendredi 8 septembre 2017 19:58
  • Bonjour Nourdine

    Merci pour ces informations.

    Je lis dans le second lien:

    When a column heading is clicked in a T:System.Windows.Forms.DataGridView, the default behavior is to order the grid rows based on the clicked column, or to reverse the sort order if the grid is already sorted by the clicked column. The following code example demonstrates how to use this event to perform a programmatic sort that emulates the default behavior of clicking a T:System.Windows.Forms.DataGridViewColumnHeaderCell when the default behavior has been disabled.

    Avec ensuite des procédures pour "émuler" le comportement pas défaut qui veut que l'on puisse trier une DataGridView en cliquant sur l'en-tête d'une colonne.

    Je n'ai pas changé la propriété SelectionMode alors pourquoi ne puis-je faire ce tri par defaut?

    J'ai 5 DataGridView dans mon application et je n'ai pas envie d'implanter cinq fois les procédures indiquées

    Merci

    Bernard


    Bernard Bouree

    samedi 9 septembre 2017 07:40
  • Pouvez-vous partager votre code s'il vous plait?


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    samedi 9 septembre 2017 09:27
  • Bonjour Nourdine

    voici le code de ma méthode où je défini l'une de mes DataGridView

                    

     private void DefinirColonnesDgvLegacy(IReadOnlyCollection<ToponymeLegacy> liste)
            {
                DGVLegacy.AutoGenerateColumns = false;
                DGVLegacy.AllowUserToAddRows = false;
                if (DGVLegacy.Columns.Count > 0)
                {
                    DGVLegacy.Columns.Clear();
                    DGVLegacy.DataSource = null;
                }

                DGVLegacy.DataSource = liste;
                var colLocation = new DataGridViewTextBoxColumn()
                {
                    Name = "Location",
                    HeaderText = "Location",
                    DataPropertyName = "Location",
                    Width = 300

                };
                DGVLegacy.Columns.Add(colLocation);

                var colShortName = new DataGridViewTextBoxColumn()
                {
                    Name = "ShortName",
                    HeaderText = "ShortName",
                    DataPropertyName = "ShortName",
                    Width = 300
                };
                DGVLegacy.Columns.Add(colShortName);

                var colNotes = new DataGridViewTextBoxColumn()
                {
                    Name = "Notes",
                    HeaderText = "Notes",
                    DataPropertyName = "Notes",
                    Width = 300
                };
                DGVLegacy.Columns.Add(colNotes);

                var colVerified = new DataGridViewTextBoxColumn()
                {
                    Name = "Verified",
                    HeaderText = "Verified",
                    DataPropertyName = "Verified",
                    Width = 20
                };
                DGVLegacy.Columns.Add(colVerified);

                var colLatitude = new DataGridViewTextBoxColumn()
                {
                    Name = "Latitude",
                    HeaderText = "Latitude",
                    DataPropertyName = "Latitude",
                    Width = 100
                };
                DGVLegacy.Columns.Add(colLatitude);

                var colLongitude = new DataGridViewTextBoxColumn()
                {
                    Name = "Longitude",
                    HeaderText = "Longitude",
                    DataPropertyName = "Longitude",
                    Width = 100
                };
                DGVLegacy.Columns.Add(colLongitude);

                var colVEResolved = new DataGridViewTextBoxColumn()
                {
                    Name = "VEResolved",
                    HeaderText = "VEResolved",
                    DataPropertyName = "VEResolved",
                    Width = 20
                };
                DGVLegacy.Columns.Add(colVEResolved);

            }

    Merci

    Bernard


    Bernard Bouree

    samedi 9 septembre 2017 12:23
  • Bonjour Bernard,

    Vos 5 DataGridViews ont des sources différentes?

    Le souci c'est que le tri par colonne concerne la DataGridView visée. Etant donné que l'évènement est le même pour toutes les DataGridViews, vous pouvez créer une seule méthode de tri dans laquelle vous utilisez un Select Case.

    L'objectif du Select Case est d'orienter le tri dans la bonne DataGridView


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    dimanche 10 septembre 2017 11:17
  • Bonjour Nourdine

    Oui mes DataGridView ont des sources différentes.

    Ce qu'il y a de bizarre c'est qu'au début j'avais laissé les DataGridView construire les colonnes tout seul et alors je pouvais cliquer sur les en-tête de colonne pour trier.

    Le fait d'avoir construit les colonnes via la procédure montrée a supprimer cette possibilité.

    De plus dans la documentation que vous m’avez cité il est indiqué

    When a column heading is clicked in a T:System.Windows.Forms.DataGridView, the default behavior is to order the grid rows based on the clicked column, or to reverse the sort order if the grid is already sorted by the clicked column

    Je comprends que le comportement par défaut d'une DataGridView est bien de permettre ce mode de tri !

    Bernard


    Bernard Bouree

    dimanche 10 septembre 2017 12:38
  • Bonjour Bernard,

    Après quelques recherches, ce code devrait fonctionner pour mettre en place le tri dans la colonne ShortName :

    DGVLegacy.Columns["ShortName"].SortMode = DataGridViewColumnSortMode.Automatic;

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    lundi 11 septembre 2017 10:38
  • Bonjour Nourdine

    et merci infiniment

    Bernard


    Bernard Bouree

    lundi 11 septembre 2017 12:39
  • Nourdine

    En fait cela ne marche pas!

    En regardant dans la doc de 

    enum DataGridViewColumnSortMode

    et la définition de Automatic il est indiqué:

    The user can sort the column by clicking the column header unless the column headers are used for selection. A sorting glyph will be displayed automatically.

    Il semblerait donc qu'il y ait une condition, celle de ne pas utiliser les en-tête dans une selection, ce qui est mon cas puisque j'utilise une lamda expression pour travailler ma liste.

    Merci

    Bernard



    Bernard Bouree

    lundi 11 septembre 2017 13:34