Modos de classificação de coluna no controle do Windows Forms DataGridView

DataGridViewas colunas têm três modos de classificação. O modo de classificação para cada coluna é especificado por meio de SortMode a propriedade da coluna, que pode ser definida como um dos seguintes DataGridViewColumnSortMode valores de enumeração.

DataGridViewColumnSortModevalor

Descrição

Automatic

Padrão para as colunas da caixa de texto. A menos que os cabeçalhos de coluna são usados para seleção, clicando no cabeçalho da coluna automaticamente classifica o DataGridView por esta coluna e exibe um glifo indicando a ordem de classificação.

NotSortable

Padrão para as colunas da caixa de non–text. Você pode classificar essa coluna programaticamente; No entanto, ele não se destina para classificação, portanto, nenhum espaço é reservado para o glifo de classificação.

Programmatic

Você pode classificar essa coluna programaticamente, e o espaço é reservado para o glifo de classificação.

Talvez você queira alterar o modo de classificação para uma coluna que o padrão é NotSortable se ele contém valores que podem ser solicitados de forma significativa. Por exemplo, se você tiver uma coluna de banco de dados que contém números que representam os estados de item, você pode exibir esses números como ícones correspondentes pela vinculação a uma coluna de imagem para a coluna do banco de dados. Você pode alterar os valores de célula numéricos em valores de exibição de imagem em um manipulador para o DataGridView.CellFormatting de evento. Nesse caso, definindo a SortMode propriedade para Automatic permitirá que os usuários classificar a coluna. Classificação automática permitirá que os usuários para agrupar os itens que tenham o mesmo estado, mesmo se os estados que correspondem aos números não possuem uma seqüência natural. Caixa de seleção de colunas são outro exemplo em que a classificação automática é útil para agrupar itens no mesmo estado.

Você pode classificar um DataGridView por programação, os valores em qualquer coluna ou em várias colunas, independentemente do SortMode configurações. A classificação programática é útil quando você deseja fornecer sua própria interface de usuário (UI) para classificar ou quando você deseja implementar a classificação personalizada. Fornecendo sua própria interface de usuário de classificação é útil, por exemplo, quando você definir o DataGridView o modo de seleção para habilitar a seleção do cabeçalho de coluna. Nesse caso, embora os cabeçalhos de coluna não podem ser usados para classificação, você ainda deseja os cabeçalhos para exibir o glifo apropriado de classificação, portanto, você definiria a SortMode propriedade para Programmatic.

Colunas definida para o modo de classificação através de programação não são exibidas automaticamente um glifo de classificação. Para essas colunas, você deve exibir o glifo mesmo definindo a DataGridViewColumnHeaderCell.SortGlyphDirection propriedade. Isso é necessário se você quiser flexibilidade na classificação personalizada. Por exemplo, se você classificar o DataGridView por várias colunas, talvez você queira exibir vários glifos de classificação ou nenhum glifo de classificação.

Embora programaticamente, você pode classificar um DataGridView por qualquer coluna, algumas colunas, como, por exemplo, colunas de botão, podem não conter valores que podem ser solicitados de forma significativa. Para essas colunas, um SortMode configuração da propriedade de NotSortable indica que ele será nunca ser usado para classificação, portanto, não é necessário reservar espaço no cabeçalho para o glifo de classificação.

Quando um DataGridView é classificada, você pode determinar a coluna de classificação e a ordem de classificação, verificando os valores a SortedColumn e SortOrder Propriedades. Esses valores não são significativos após uma operação de classificação personalizada. Para obter mais informações sobre a classificação personalizada, consulte a seção de classificação personalizada, neste tópico.

Quando um DataGridView controle contendo colunas acopladas e não acopladas é classificado, os valores nas colunas não acoplados não podem ser mantidos automaticamente. Para manter esses valores, você deve implementar o modo virtual, definindo a VirtualMode propriedade para true e manipulando o CellValueNeeded e CellValuePushed eventos. Para obter mais informações, consulte Como: Implementar o modo Virtual o controle DataGridView do Windows Forms. Não há suporte para a classificação por colunas não acopladas no modo acoplado.

A classificação programática

Você pode classificar um DataGridView programaticamente, chamando seu Sort método.

O Sort(DataGridViewColumn,ListSortDirection) de sobrecarga da Sort leva um DataGridViewColumn e um ListSortDirection o valor de enumeração como parâmetros. Essa sobrecarga é útil quando a classificação por colunas com valores que podem ser encomendados significativamente, mas que você não deseja configurar para classificação automática. Quando você chamar essa sobrecarga e passar em uma coluna com um SortMode valor da propriedade de DataGridViewColumnSortMode.Automatic, o SortedColumn e SortOrder propriedades são definidas automaticamente e o glifo de classificação apropriado aparece no cabeçalho de coluna.

ObservaçãoObservação

Quando o DataGridView controle está vinculado a uma fonte de dados externos, definindo a DataSource propriedade, o Sort(DataGridViewColumn,ListSortDirection) a sobrecarga de método não funciona em colunas não acoplado. Além disso, quando o VirtualMode é a propriedade true, você pode chamar essa sobrecarga apenas para colunas acopladas. Para determinar se uma coluna está vinculado a dados, verifique o IsDataBound valor da propriedade. Não há suporte para a classificação de colunas não acopladas no modo acoplado.

Ordenação personalizada

Você pode personalizar DataGridView usando o Sort(IComparer) de sobrecarga da Sort método ou pelo tratamento de SortCompare evento.

O Sort(IComparer) sobrecarga de método tem uma instância de uma classe que implementa o IComparer interface como um parâmetro. Essa sobrecarga é útil quando você deseja fornecer classificação personalizada; Por exemplo, quando os valores em uma coluna não têm uma ordem de classificação natural ou quando o natural ordem de classificação é inadequado. Nesse caso, você não pode usar a classificação automática, mas ainda poderá ser necessário aos usuários classificar clicando-se os cabeçalhos de coluna. Você pode chamar essa sobrecarga em um manipulador para o ColumnHeaderMouseClick evento se você não usar cabeçalhos de coluna para a seleção.

ObservaçãoObservação

O Sort(IComparer) a sobrecarga de método só funciona quando o DataGridView controle não está vinculado a uma fonte de dados externos e o VirtualMode valor da propriedade é false. Para personalizar a classificação de colunas vinculadas a uma fonte de dados externos, você deve usar as operações de classificação fornecidas pela fonte de dados. No modo virtual, você deve fornecer suas próprias operações de classificação para colunas não acopladas.

Para usar o Sort(IComparer) a sobrecarga de método, você deve criar sua própria classe que implementa o IComparer interface. Essa interface requer sua classe para implementar a IComparer.Compare método, ao qual o DataGridView passa DataGridViewRow objetos como entrada quando a Sort(IComparer) a sobrecarga de método é chamada. Com isso, você pode calcular a ordenação de linha correto com base nos valores de qualquer coluna.

O Sort(IComparer) sobrecarga de método não define o SortedColumn e SortOrder Propriedades, portanto, você deve sempre definir a DataGridViewColumnHeaderCell.SortGlyphDirection propriedade para exibir o glifo de classificação.

Como uma alternativa para o Sort(IComparer) a sobrecarga de método, você pode fornecer classificação personalizada, Implementando um manipulador para o SortCompare de evento. Esse evento ocorre quando os usuários clicam os cabeçalhos das colunas configuradas para a classificação automática ou quando você chamar o Sort(DataGridViewColumn,ListSortDirection) de sobrecarga da Sort método. O evento ocorre para cada par de linhas no controle, permitindo que você calcule sua ordem correta.

ObservaçãoObservação

O SortCompare evento não ocorre quando o DataSource for definida ou quando o VirtualMode valor da propriedade é true.

Consulte também

Tarefas

Como: Definir os modos de classificação para colunas no controle do Windows Forms DataGridView

Referência

DataGridView

DataGridView.Sort

DataGridView.SortedColumn

DataGridView.SortOrder

DataGridViewColumn.SortMode

DataGridViewColumnHeaderCell.SortGlyphDirection

Conceitos

Como: Personalizar o controle DataGridView do Windows Forms de classificação

Outros recursos

Classificar dados em Windows Forms DataGridView Control