No Web Form é simples, basta atribuir a propriedade AllowSorting para true e implementar o evento Sorting do GridView.
Agora no Windows Form é um pouco diferente, pois no DataGridView não existe a propriedade e nem o evento dito anteriormente.
(Obs.: Se você criar um DataGridView e não populá-lo programaticamente (utilizando a propriedade DataSource), a ordenação funcionará automaticame sem a necessidade de utilizar o código abaixo.)
Então como fazer a ordenação!?
E se utilizarmos a interface IComparer?
Vamos ao código!
Temos uma entidade chamada Item, que contêm os atributos que serão exibidos no DataGridView.
public class Item
{
public int Codigo { get; set; }
public string Nome { get; set; }
}
Criamos uma classe para realizar a comparação dos itens, com o intuito de ordenar os itens, esta classe implementa a interface genérica IComparer e o código da comparação é adicionado no método Compare.
public class ItemComparer : IComparer- { private int _comparerColumnIndex = 0; public ItemComparer(int comparerColumnIndex) { _comparerColumnIndex = comparerColumnIndex; } #region IComparer
- Members public int Compare(Item x, Item y) { int retorno = 0; switch (_comparerColumnIndex) { case 0: retorno = x.Codigo.CompareTo(y.Codigo); break; case 1: retorno = string.Compare(x.Nome, y.Nome); break; } return retorno; } #endregion }
Para efetuar a ordenação, criamos um form com um DataGridView.
Neste DataGridView utilizamos o evento ColumnHeaderMouseClick. Este evento será disparado quando o usuário clicar sobre o Header da coluna na Grid.
Na implementação deste evento, efetuamos a chamada ao método Carregar passando como parâmetro o índice da coluna que foi clicado, para popular a Grid.
Neste método, criamos a lista genérica de Item e utilizamos a classe criada anteriormente (ItemComparer), passando no construtor o índice que foi clicado e após isto utilizamos o método Sort da lista genérica antes de atribuir a lista ao DataSource do Grid.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Carregar(null);
}
private void Carregar(int? columnIndex)
{
List- itens = new List
- () { new Item() { Codigo = 2, Nome = "ABC" }, new Item() { Codigo = 1, Nome = "XYZ" } };
if (columnIndex != null)
{
ItemComparer comparer = new ItemComparer(columnIndex.Value);
itens.Sort(comparer);
}
dataGridView1.DataSource = itens;
}
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
this.Carregar(e.ColumnIndex);
}
}
0 comentários:
Postar um comentário