2011-11-28 21 views
5

¿Cómo ordenar un control listview por un número de columna específico en WinForms .NET 2.0? p.ej. Tengo una columna llamada "Número de línea" cuyo índice es 1, y quiero ordenar mis elementos en el cuadro vista de lista por orden ascendente.listview clasificación C# por columna específica

+0

Ver esta implementación de Microsoft: https://support.microsoft.com/en-us/kb/319401 – Mangesh

Respuesta

6

He utilizado este clasificador de columna en muchos proyectos Winform:

private void listView1_ColumnClick(object sender, 
        System.Windows.Forms.ColumnClickEventArgs e) 
{ 
    ListView myListView = (ListView)sender; 

    // Determine if clicked column is already the column that is being sorted. 
    if (e.Column == lvwColumnSorter.SortColumn) 
    { 
    // Reverse the current sort direction for this column. 
    if (lvwColumnSorter.Order == SortOrder.Ascending) 
    { 
     lvwColumnSorter.Order = SortOrder.Descending; 
    } 
    else 
    { 
     lvwColumnSorter.Order = SortOrder.Ascending; 
    } 
    } 
    else 
    { 
    // Set the column number that is to be sorted; default to ascending. 
    lvwColumnSorter.SortColumn = e.Column; 
    lvwColumnSorter.Order = SortOrder.Ascending; 
    } 

    // Perform the sort with these new sort options. 
    myListView.Sort(); 
} 

Fuente: Click Here

+0

hará. Gracias. – david

14

Existe ejemplo en MSDN ListView.ColumnClick article: muy corto y simple. En esencia, se escribe una ListViewItemComparer y utilizarlo cada vez que se pulsa una columna:

class ListViewItemComparer : IComparer 
{ 
    private int col = 0; 

    public ListViewItemComparer(int column) 
    { 
     col = column; 
    } 
    public int Compare(object x, object y) 
    { 
     return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); 
    } 
} 

class MyForm : Form 
{ 
    // private System.Windows.Forms.ListView listView1; 

    // ColumnClick event handler. 
    private void ColumnClick(object o, ColumnClickEventArgs e) 
    { 
     this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column); 
    } 
} 
+1

No entiendo por qué esto fue marcado. para una clasificación rápida, ¡funciona genial! ¿Alternar entre asc/desc eso es bastante fácil de hacer! ¡gracias de cualquier manera! –

+0

Simplemente agrega "using System.Collections;" en su proyecto y esto es simple y funciona, para un tipo ascendente básico –

Cuestiones relacionadas