ListView - Ordenar ao clicar no título

<< Click to Display Table of Contents >>

Navigation:  Desktop >

ListView - Ordenar ao clicar no título

Previous pageReturn to chapter overviewNext page

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;

       }

   }

}