对ListView的列进行排序 2009-12-03 创建一个项目 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; namespace testListviewSort { public partial class Form1 : Form { #region 自定义变量 int currentCol = -1; bool sort; #endregion public Form1() { InitializeComponent(); } private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) { string Asc = ((char)0x25BC).ToString().PadLeft(2, ' '); string Des = ((char)0x25b2).ToString().PadLeft(2, ' '); //string Asc = ""; //string Des = ""; 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); } } } } }