<< Click to Display Table of Contents >> ListView - Ordenar ao clicar no título |
![]() ![]() ![]() |
lvArquivos = ListView
Form.cs
public partial class Principal : Form
{
private int sortColumn = -1;
private void Principal_Load(object sender, EventArgs e)
{
// ordena por nome por default
sortColumn = COL_NOME;
lvArquivos.Sorting = SortOrder.Ascending;
lvArquivos.Sort();
lvArquivos.ListViewItemSorter = new ListViewItemComparer(sortColumn, lvArquivos.Sorting);
}
private void lvArquivos_ColumnClick(object sender, ColumnClickEventArgs e)
{
// a coluna é diferente da última?
if (e.Column != sortColumn)
{
// seta ela como atual
sortColumn = e.Column;
// ascendente é default
lvArquivos.Sorting = SortOrder.Ascending;
}
else
{
// é mesma, vamos inverter a asc/desc
if (lvArquivos.Sorting == SortOrder.Ascending)
lvArquivos.Sorting = SortOrder.Descending;
else
lvArquivos.Sorting = SortOrder.Ascending;
}
// chama o método de sort
lvArquivos.Sort();
// associao o método de ordenação
lvArquivos.ListViewItemSorter = new ListViewItemComparer(e.Column, lvArquivos.Sorting);
}
}
ListItemComparer.cs
using System;
using System.Collections;
using System.Windows.Forms;
namespace MarketMp3
{
class ListViewItemComparer : IComparer
{
private int col;
private SortOrder order;
public ListViewItemComparer()
{
col = 0;
order = SortOrder.Ascending;
}
public ListViewItemComparer(int column, SortOrder order)
{
col = column;
this.order = order;
}
public int Compare(object x, object y)
{
int returnVal = -1;
returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
// Determine whether the sort order is descending.
if (order == SortOrder.Descending)
// Invert the value returned by String.Compare.
returnVal *= -1;
return returnVal;
}
}
}