Partager via


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

Mise à jour : novembre 2007

Les colonnes DataGridView ont trois modes de tri. Le mode de tri de chaque colonne est spécifié via la propriété SortMode de la colonne, qui peut être définie selon l'une des valeurs d'énumération DataGridViewColumnSortMode suivantes.

Valeur de DataGridViewColumnSortMode

Description

Automatic

Valeur par défaut pour les colonnes de zone de texte. À moins que les en-têtes de colonne ne soient utilisés pour la sélection, il suffit de cliquer sur l'en-tête de colonne pour trier automatiquement le DataGridView par cette colonne et afficher un glyphe qui indique l'ordre de tri.

NotSortable

Valeur par défaut pour les colonnes autres que de zone de texte. Vous pouvez trier cette colonne par programme ; toutefois, comme elle n'est pas destinée à être triée, aucun espace n'est réservé pour le glyphe de tri.

Programmatic

Vous pouvez trier cette colonne par programme, et l'espace est réservé pour le glyphe de tri.

Vous pouvez souhaiter modifier le mode de tri pour une colonne qui devient pat défaut NotSortable si elle contient des valeurs qui peuvent être triées de manière significative. Par exemple, si vous avez une colonne de base de données qui contient des nombres qui représentent des états d'éléments, vous pouvez afficher ces nombres comme icônes correspondantes en liant une colonne d'image à la colonne de base de données. Vous pouvez transformer ensuite les valeurs de cellules numériques en valeurs d'affichage d'image dans un gestionnaire d'événement DataGridView.CellFormatting. Dans ce cas, le fait d'attribuer à la propriété SortMode la valeur Automatic permettra à vos utilisateurs de trier la colonne. Le tri automatique permettra à vos utilisateurs de regrouper des éléments qui ont le même état si les états correspondant aux nombres n'ont pas une séquence naturelle. Les colonnes de case à cocher sont un autre exemple où le tri automatique est utile pour regrouper des éléments dans le même état.

Vous pouvez trier un DataGridView par programme, selon les valeurs d'une colonne ou de plusieurs colonnes, indépendamment des paramètres SortMode. Le tri par programme est utile lorsque vous souhaitez fournir votre propre interface utilisateur pour le tri ou lorsque vous souhaitez implémenter le tri personnalisé. Le fait de fournir votre propre interface utilisateur de tri est utile, par exemple, lorsque vous définissez le mode de sélection DataGridView de façon à activer la 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 pouvez souhaiter encore que les en-têtes affichent le glyphe de tri approprié, afin que vous puissiez attribuer à la propriété SortMode la valeur Programmatic.

Les colonnes définies selon le mode de tri par programme n'affichent pas automatiquement de glyphe de tri. Pour ces colonnes, vous devez afficher le glyphe vous-même en définissant la propriété DataGridViewColumnHeaderCell.SortGlyphDirection. Ceci est nécessaire si vous souhaitez de la souplesse dans le tri personnalisé. Par exemple, si vous triez le DataGridView par plusieurs colonnes, vous pouvez souhaiter afficher plusieurs glyphes de tri ou aucun glyphe de tri.

Bien que vous puissiez trier par programme un DataGridView selon n'importe quelle colonne, certaines colonnes, comme les colonnes de bouton, peuvent ne pas contenir des valeurs susceptibles d'être triées de manière significative. Pour ces colonnes, une propriété SortMode ayant la valeur NotSortable indique qu'elle ne sera jamais utilisée pour le tri, et qu'il n'est donc pas nécessaire de réserver l'espace dans l'en-tête pour le glyphe de tri.

Lorsqu'une DataGridView est triée, vous pouvez déterminer à la fois la colonne de tri et l'ordre de tri en sélectionnant les valeurs des propriétés SortedColumn et SortOrder. Ces valeurs ne sont pas explicites 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 contrôle DataGridView qui contient des colonnes dépendantes et indépendantes est trié, les valeurs des colonnes indépendantes ne peuvent pas être maintenues automatiquement. Pour maintenir ces valeurs, vous devez implémenter le mode virtuel en attribuant à la propriété VirtualMode la valeur true et en gérant les événements CellValueNeeded et CellValuePushed. Pour plus d'informations, consultez Comment : implémenter le mode virtuel dans le contrôle DataGridView Windows Forms. Le tri par colonnes indépendantes en mode dépendant n'est pas pris en charge.

Tri par programme

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

La surcharge Sort(DataGridViewColumn,ListSortDirection) de la méthode Sort prend un DataGridViewColumn et une valeur d'énumération ListSortDirection comme paramètres. Cette surcharge est utile lorsque vous voulez effectuer un tri par colonnes avec des valeurs qui peuvent être classées significativement, mais que vous ne souhaitez pas procéder à une configuration pour tri automatique. Lorsque vous appelez cette surcharge et passez dans une colonne avec une valeur de propriété SortMode de DataGridViewColumnSortMode.Automatic, les propriétés SortedColumn et SortOrder sont définies automatiquement et le glyphe de tri approprié apparaît dans l'en-tête de colonne.

Remarque :

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

Tri personnalisé

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

La surcharge de méthode Sort(IComparer) prend une instance d'une classe qui implémente l'interface IComparer comme un 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 souhaiter encore que vos utilisateurs puissent trier en cliquant sur les en-têtes de colonne. Vous pouvez appeler cette surcharge dans un gestionnaire d'événement ColumnHeaderMouseClick si vous n'utilisez pas les en-têtes de colonne pour la sélection.

Remarque :

La surcharge de méthode Sort(IComparer) fonctionne uniquement lorsque le contrôle DataGridView n'est pas lié à une source de données externe et que la valeur de propriété VirtualMode est false. Pour personnaliser le tri pour les 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 surcharge de méthode Sort(IComparer), vous devez créer votre propre classe qui implémente l'interface IComparer. Cette interface nécessite que votre classe implémente la méthode IComparer.Compare à laquelle le DataGridView passe des objets DataGridViewRow comme entrée lorsque la surcharge de méthode Sort(IComparer) est appelée. Avec ceci, vous pouvez calculer l'ordre correct des lignes selon les valeurs de n'importe quelle colonne.

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

Comme une alternative à la surcharge de méthode Sort(IComparer), vous pouvez fournir le 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 surcharge Sort(DataGridViewColumn,ListSortDirection) de la méthode Sort. 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 propriété DataSource est définie ou lorsque la propriété VirtualMode a la valeur true.

Voir aussi

Tâches

Comment : définir les modes de tri des colonnes du contrôle DataGridView Windows Forms

Concepts

Comment : personnaliser le tri dans le contrôle DataGridView Windows Forms

Référence

DataGridView

DataGridView.Sort

DataGridView.SortedColumn

DataGridView.SortOrder

DataGridViewColumn.SortMode

DataGridViewColumnHeaderCell.SortGlyphDirection

Autres ressources

Tri des données dans le contrôle DataGridView Windows Forms