web-dev-qa-db-fra.com

Comment désactiver le tri dans DataGridView?

Comment puis-je désactiver le tri dans DataGridView? Je dois désactiver le tri de l'entête DataGridView.

50
Gold
foreach (DataGridViewColumn column in dataGridView.Columns)
{
    column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
63
hunter

Si vous voulez que les colonnes ne puissent pas être triées statiquement. Tu peux faire comme ça

  1. Ouvrez les fenêtres EditColumns du contrôle DatagridView2.Sélectionnez la colonne que vous souhaitez rendre non triable dans le volet de gauche.
  2. Dans le volet de propriétés de droite, sélectionnez la propriété Mode de tri, puis Non triable.
16

Utilisez LINQ:

Datagridview1.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
14
Co. Aden

C'est très simple:

foreach (DataGridViewColumn dgvc in dataGridView1.Columns)
{
    dgvc.SortMode = DataGridViewColumnSortMode.NotSortable;
}
5
Dara.Joukar

Vous pouvez le désactiver dans l'événement ColumnAdded:

private void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
    dataGridView1.Columns[e.Column.Index].SortMode = DataGridViewColumnSortMode.NotSortable;
}
0
Deepak

Pour étendre les fonctionnalités de contrôle de ce type, j'aime utiliser des méthodes d'extension pour pouvoir les réutiliser facilement. Voici un fichier d'extensions de démarrage contenant une extension permettant de désactiver le tri sur un datagridview.

Pour l'utiliser, il suffit de l'inclure dans votre projet et d'appeler comme ceci

myDatagridView.DisableSorting () 

Dans mon cas, j'ai ajouté cette ligne de code dans le gestionnaire d'événements DataBindingComplete de DataGridView où je voulais que le tri soit désactivé.

Imports System.ComponentModel
Imports System.Reflection
Imports System.Runtime.CompilerServices
Imports System.Windows.Forms

Public Module Extensions

<Extension()>
Public Sub DisableSorting(datagrid As DataGridView)
    For index = 0 To datagrid.Columns.Count - 1
        datagrid.Columns(index).SortMode = DataGridViewColumnSortMode.NotSortable
    Next
End Sub


End Module
0
Scope Creep
private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
      for (int i = 0; i < dataGridView1.Columns.Count; i++)
      {
           dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
      }
}
0
Fatih Gurbuz

Si vous pouvez étendre DataGridView, vous pouvez remplacer la méthode Sort par une méthode vide. Cela désactive complètement le tri de DataGridView.

public override void Sort(DataGridViewColumn dataGridViewColumn, ListSortDirection direction)
{
    //base.Sort(dataGridViewColumn, direction);
}

Remarque: vous ne pouvez même pas trier par programme aucune colonne.

0
bansi