//www.wanyouc.com www.cnhgds.com www.yunweis.com
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Text;
using System.Windows.Forms;
using System.Collections;
//www.wanyouc.com www.cnhgds.com www.yunweis.com
namespace testListviewSort
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region 自定义变量
int currentCol = -1;
bool sort;
#endregion
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 ListViewItemComparer(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;
}
}
public class ListViewItemComparer : IComparer
{
public bool sort_b;
public SortOrder order = SortOrder.Ascending;
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(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);
}
}
}
}
}