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;
}
}
------解决方案--------------------所谓多列排序,就是按照顺序来依次给各个列排序。
排序选择稳定的算法。也就是遇到相同的项目,排序之后相同的项目的次序不变即可。
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。