Partager via


Modes de tri des colonnes du contrôle DataGridView Windows Forms

DataGridView les colonnes ont trois modes de tri. Le mode de tri de chaque colonne est spécifié par le biais de la SortMode propriété de la colonne, qui peut être défini sur l’une des valeurs d’énumération suivantes DataGridViewColumnSortMode .

Valeur DataGridViewColumnSortMode Description
Automatic Valeur par défaut pour les colonnes de zone de texte. Sauf si les en-têtes de colonne sont utilisés pour la sélection, le fait de cliquer sur l’en-tête de colonne trie automatiquement la DataGridView colonne et affiche un glyphe indiquant l’ordre de tri.
NotSortable Valeur par défaut pour les colonnes non de zone de texte. Vous pouvez trier cette colonne par programmation ; toutefois, il n’est pas destiné au tri, donc aucun espace n’est réservé au glyphe de tri.
Programmatic Vous pouvez trier cette colonne par programmation et l’espace est réservé au glyphe de tri.

Vous pouvez modifier le mode de tri d’une colonne par défaut si elle contient des valeurs pouvant être ordonnées NotSortable de manière significative. Par exemple, si vous avez une colonne de base de données contenant des nombres représentant des états d’élément, vous pouvez afficher ces nombres en tant qu’icônes correspondantes en liant une colonne d’image à la colonne de base de données. Vous pouvez ensuite modifier les valeurs de cellule numérique en valeurs d’affichage d’image dans un gestionnaire pour l’événement DataGridView.CellFormatting . Dans ce cas, la définition de la SortMode propriété pour permettre à Automatic vos utilisateurs de trier la colonne. Le tri automatique permet à vos utilisateurs de regrouper les éléments qui ont le même état même si les états correspondant aux nombres n’ont pas de séquence naturelle. Les colonnes de case à cocher sont un autre exemple où le tri automatique est utile pour regrouper les éléments dans le même état.

Vous pouvez trier par DataGridView programmation les valeurs de n’importe quelle colonne ou de plusieurs colonnes, quels que soient les SortMode paramètres. Le tri par programmation est utile lorsque vous souhaitez fournir votre propre interface utilisateur pour le tri ou lorsque vous souhaitez implémenter le tri personnalisé. Fournir votre propre interface utilisateur de tri est utile, par exemple, lorsque vous définissez le mode de sélection pour activer la DataGridView sélection d’en-tête de colonne. Dans ce cas, bien que les en-têtes de colonne ne puissent pas être utilisés pour le tri, vous souhaitez toujours que les en-têtes affichent le glyphe de tri approprié. Vous devez donc définir la SortMode propriété Programmaticsur .

Les colonnes définies sur le mode de tri programmatique n’affichent pas automatiquement un glyphe de tri. Pour ces colonnes, vous devez afficher vous-même le glyphe en définissant la DataGridViewColumnHeaderCell.SortGlyphDirection propriété. Cela est nécessaire si vous souhaitez une flexibilité dans le tri personnalisé. Par exemple, si vous triez la DataGridView valeur par plusieurs colonnes, vous pouvez afficher plusieurs glyphes de tri ou aucun glyphe de tri.

Bien que vous puissiez trier par programmation une DataGridView colonne, certaines colonnes, telles que les colonnes de bouton, peuvent ne pas contenir de valeurs qui peuvent être ordonnées de manière significative. Pour ces colonnes, un SortMode paramètre de propriété indique NotSortable qu’il ne sera jamais utilisé pour le tri. Il n’est donc pas nécessaire de réserver de l’espace dans l’en-tête pour le glyphe de tri.

Lorsqu’un DataGridView tri est effectué, vous pouvez déterminer à la fois la colonne de tri et l’ordre de tri en case activée les valeurs des propriétés et SortOrder des SortedColumn propriétés. Ces valeurs ne sont pas significatives après une opération de tri personnalisée. Pour plus d’informations sur le tri personnalisé, consultez la section Tri personnalisé plus loin dans cette rubrique.

Lorsqu’un DataGridView contrôle contenant à la fois des colonnes liées et indépendantes est trié, les valeurs des colonnes non liées ne peuvent pas être conservées automatiquement. Pour conserver ces valeurs, vous devez implémenter le mode virtuel en définissant la VirtualMode propriété sur true et en gérant les événements et CellValuePushed les CellValueNeeded événements. Pour plus d’informations, consultez How to : Implement Virtual Mode in the Windows Forms DataGridView Control. Le tri par colonnes non liées en mode lié n’est pas pris en charge.

Tri par programmation

Vous pouvez trier un DataGridView programme en appelant sa Sort méthode.

La Sort(DataGridViewColumn,ListSortDirection) surcharge de la Sort méthode prend une valeur d’énumération et une DataGridViewColumnListSortDirection valeur d’énumération en tant que paramètres. Cette surcharge est utile lors du tri par colonnes avec des valeurs qui peuvent être ordonnées de manière significative, mais que vous ne souhaitez pas configurer pour le tri automatique. Lorsque vous appelez cette surcharge et transmettez une colonne avec une SortMode valeur de propriété , DataGridViewColumnSortMode.Automaticles SortedColumn propriétés et SortOrder les propriétés sont définies automatiquement et le glyphe de tri approprié apparaît dans l’en-tête de colonne.

Remarque

Lorsque le DataGridView contrôle est lié à une source de données externe en définissant la DataSource propriété, la Sort(DataGridViewColumn,ListSortDirection) surcharge de méthode ne fonctionne pas pour les colonnes non liées. En outre, lorsque la VirtualMode propriété est true, vous pouvez appeler cette surcharge uniquement pour les colonnes liées. Pour déterminer si une colonne est liée aux données, case activée la valeur de la IsDataBound propriété. Le tri des colonnes non liées en mode lié n’est pas pris en charge.

Tri personnalisé

Vous pouvez personnaliser DataGridView à l’aide de la Sort(IComparer) surcharge de la Sort méthode ou en gérant l’événement SortCompare .

La Sort(IComparer) surcharge de méthode prend une instance d’une classe qui implémente l’interface IComparer en tant que paramètre. Cette surcharge est utile lorsque vous souhaitez fournir un tri personnalisé ; par exemple, lorsque les valeurs d’une colonne n’ont pas d’ordre de tri naturel ou lorsque l’ordre de tri naturel est inapproprié. Dans ce cas, vous ne pouvez pas utiliser le tri automatique, mais vous pouvez toujours souhaiter que vos utilisateurs trient en cliquant sur les en-têtes de colonne. Vous pouvez appeler cette surcharge dans un gestionnaire pour l’événement ColumnHeaderMouseClick si vous n’utilisez pas d’en-têtes de colonne pour la sélection.

Remarque

La Sort(IComparer) surcharge de méthode fonctionne uniquement lorsque le DataGridView contrôle n’est pas lié à une source de données externe et que la valeur de la VirtualMode propriété est false. Pour personnaliser le tri des colonnes liées à une source de données externe, vous devez utiliser les opérations de tri fournies par la source de données. En mode virtuel, vous devez fournir vos propres opérations de tri pour les colonnes indépendantes.

Pour utiliser la Sort(IComparer) surcharge de méthode, vous devez créer votre propre classe qui implémente l’interface IComparer . Cette interface nécessite que votre classe implémente la IComparer.Compare méthode, à laquelle les DataGridView objets passent DataGridViewRow comme entrée lorsque la surcharge de méthode Sort(IComparer) est appelée. Avec cela, vous pouvez calculer l’ordre de ligne correct en fonction des valeurs de n’importe quelle colonne.

La Sort(IComparer) surcharge de méthode ne définit pas les SortedColumn propriétés et SortOrder vous devez donc toujours définir la DataGridViewColumnHeaderCell.SortGlyphDirection propriété pour afficher le glyphe de tri.

En guise d’alternative à la Sort(IComparer) surcharge de méthode, vous pouvez fournir un tri personnalisé en implémentant un gestionnaire pour l’événement SortCompare . Cet événement se produit lorsque les utilisateurs cliquent sur les en-têtes de colonnes configurés pour le tri automatique ou lorsque vous appelez la Sort(DataGridViewColumn,ListSortDirection) surcharge de la Sort méthode. L’événement se produit pour chaque paire de lignes dans le contrôle, ce qui vous permet de calculer leur ordre correct.

Remarque

L’événement SortCompare ne se produit pas lorsque la DataSource propriété est définie ou lorsque la valeur de la VirtualMode propriété est true.

Voir aussi