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 :

Sort sur un DataGridView avec BindingSource


Sujet :

Windows Forms

  1. #1
    Invité
    Invité(e)
    Par défaut Sort sur un DataGridView avec BindingSource
    Bonjour,

    Je teste l'utilisation d'une base de données en c#.
    J'utilise pour cela une base de données SQLite avec Dapper.SimpleCRUD.

    Je cherche actuellement faire des tris sur un DataDridView.

    Voici mon 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
    private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        DataGridViewColumn column = dataGridView1.Columns[e.ColumnIndex];
     
        if (column != null)
        {
            isAsc = (sortCol == null) || 
                (column.DataPropertyName != sortCol.DataPropertyName) ||
                (!isAsc);
            string direction = isAsc ? "ASC" : "DESC";
     
     
            using (con = AccesDB.GetConnection())
            {
                userBindingSource.DataSource = con.GetList<User>($"order by {column.DataPropertyName} {direction}");
            }
     
            if (sortCol != null)
            {
                sortCol.HeaderCell.SortGlyphDirection = SortOrder.None;
            }
            column.HeaderCell.SortGlyphDirection = isAsc ? SortOrder.Ascending : SortOrder.Descending;
     
            sortCol = column;
        }
    }
    J'obtiens l'erreur suivante : System.InvalidOperationException*: 'L'opération ne peut être effectuée que sur des cellules appartenant au contrôle DataGridView.' sur les lignes 22 et 22.
    Lorsque je les commente, les tris fonctionnent correctement.

    Merci de votre aide ou vos commentaires si il est possible de simplifier ce code.

  2. #2
    Invité
    Invité(e)
    Par défaut
    J'ai réussi à corrigé l'erreur avec le code suivant :
    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
    private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        int idCol = e.ColumnIndex;
     
        if (dataGridView1.Columns[idCol] != null)
        {
            isAsc = (sortCol < 0) ||
                (idCol != sortCol) ||
                (!isAsc);
            string direction = isAsc ? "ASC" : "DESC";
     
     
            using (con = AccesDB.GetConnection())
            {
                userBindingSource.DataSource = con.GetList<User>($"order by {dataGridView1.Columns[idCol].DataPropertyName} {direction}");
            }
     
            if (sortCol >= 0 && dataGridView1.Columns[sortCol] != null)
            {
                dataGridView1.Columns[sortCol].HeaderCell.SortGlyphDirection = SortOrder.None;
            }
            dataGridView1.Columns[idCol].HeaderCell.SortGlyphDirection = isAsc ? SortOrder.Ascending : SortOrder.Descending;
     
            sortCol = idCol;
        }
    }
    par contre, peut-on appliquer un tri sans refaire une nouvelle requête ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2014, 10h57
  2. DataGridView avec comboBox sur les lignes
    Par gentelmand dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/03/2009, 13h46
  3. Réponses: 3
    Dernier message: 05/01/2009, 17h06
  4. Réponses: 1
    Dernier message: 23/11/2007, 10h03
  5. Problème avec Sort() sur un TList
    Par ViNzZz dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/08/2006, 14h45

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