public partial class WListView : System.Windows.Forms.ListView { public WListView() { InitializeComponent(); } protected override void OnPaint(PaintEventArgs pe) { // TODO: 在此处添加自定义绘制代码 // 调用基类 OnPaint base.OnPaint(pe); } protected override void OnColumnClick(ColumnClickEventArgs e) { if (this.Columns[e.Column].Tag == null) { this.ListViewItemSorter = new WListViewSorter(e.Column, 0); this.Columns[e.Column].Tag = "ASC"; } else if (this.Columns[e.Column].Tag.ToString() == "ASC") { this.ListViewItemSorter = new WListViewSorter(e.Column, 1); this.Columns[e.Column].Tag = "DESC"; } else { this.ListViewItemSorter = new WListViewSorter(e.Column, 0); this.Columns[e.Column].Tag = "ASC"; } base.OnColumnClick(e); } } public class WListViewSorter : System.Collections.IComparer { int col; int type; /// <summary> /// 构造方法 /// </summary> /// <param name="col"></param> /// <param name="type"></param> public WListViewSorter(int col,int type) { this.col = col; this.type = type; } public int Compare(object x, object y) { ListViewItem lvi1 = x as ListViewItem; ListViewItem lvi2 = y as ListViewItem; if (type == 0) { if (Common.Convert.Decimal(lvi1.SubItems[col].Text) > 0) return decimal.Compare(Common.Convert.Decimal(lvi1.SubItems[col].Text), Common.Convert.Decimal(lvi2.SubItems[col].Text)); else if (Common.Convert.DateTime(lvi1.SubItems[col].Text) > DateTime.MinValue) return DateTime.Compare(Common.Convert.DateTime(lvi1.SubItems[col].Text), Common.Convert.DateTime(lvi2.SubItems[col].Text)); else return string.Compare(lvi1.SubItems[col].Text, lvi2.SubItems[col].Text); } else { if (Common.Convert.Decimal(lvi1.SubItems[col].Text) > 0) return decimal.Compare(Common.Convert.Decimal(lvi2.SubItems[col].Text), Common.Convert.Decimal(lvi1.SubItems[col].Text)); else if (Common.Convert.DateTime(lvi1.SubItems[col].Text) > DateTime.MinValue) return DateTime.Compare(Common.Convert.DateTime(lvi2.SubItems[col].Text), Common.Convert.DateTime(lvi1.SubItems[col].Text)); else return string.Compare(lvi2.SubItems[col].Text, lvi1.SubItems[col].Text); } } }