listview 如何实现多列排序
listview 多列排序问题,请问如何解决。
------解决方案--------------------就是击标题就排序吗
------解决方案--------------------请描述清楚!
------解决方案--------------------点击标题就排序,无须重读数据库的解决方法:
#region 自定义变量,ListView1排序时需要用到这两个变量
       int currentCol = -1;
       bool sort;
  #endregion
//写一个排序类
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Windows.Forms;  
namespace jw
{
   class ListViewColumnSorter : IComparer
   {
           public bool sort_b;
           public SortOrder order = SortOrder.Ascending;
           private int col;
           public ListViewColumnSorter()
           {
               col = 0;
           }
           public ListViewColumnSorter(int column, bool sort)
           {
               col = column;
               sort_b = sort;
           }
           public int Compare(object x, object y)
           {
               if (sort_b)
               {
                   return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
               }
               else
               {
                   return String.Compare(((ListViewItem)y).SubItems[col].Text, ((ListViewItem)x).SubItems[col].Text);
               }
           }
   }
}
//写listView1_ColumnClick事件
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
       {
           string Asc = ((char)0x25bc).ToString().PadLeft(4, ' ');
           string Des = ((char)0x25b2).ToString().PadLeft(4, ' ');
           if (sort == false)
           {
               sort = true;
               string oldStr = this.listView1.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
               this.listView1.Columns[e.Column].Text = oldStr + Des;
           }
           else if (sort == true)
           {
               sort = false;
               string oldStr = this.listView1.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
               this.listView1.Columns[e.Column].Text = oldStr + Asc;
           }
           listView1.ListViewItemSorter = new ListViewColumnSorter(e.Column, sort);
           this.listView1.Sort();
           int rowCount = this.listView1.Items.Count;
           if (currentCol != -1)
           {
               for (int i = 0; i < rowCount; i++)
               {
                   this.listView1.Items[i].UseItemStyleForSubItems = false;
                   this.listView1.Items[i].SubItems[currentCol].BackColor = Color.White;
                   if (e.Column != currentCol)
                       this.listView1.Columns[currentCol].Text = this.listView1.Columns[currentCol].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
               }
           }
           for (int i = 0; i < rowCount; i++)
           {
               this.listView1.Items[i].UseItemStyleForSubItems = false;
               this.listView1.Items[i].SubItems[e.Column].BackColor = Color.WhiteSmoke;
               currentCol = e.Column;
           }
       }
------解决方案--------------------所谓多列排序,就是按照顺序来依次给各个列排序。
排序选择稳定的算法。也就是遇到相同的项目,排序之后相同的项目的次序不变即可。
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。