给你个源代码,直接就可以用了。
public class DataListView : ListView
    {
        private DataListViewSorter columnSort;
        public DataListView()
            : base()
        {
            DoubleBuffered = true;
            FullRowSelect = true;
            GridLines = true;
            HideSelection = false;
            MultiSelect = false;
            columnSort = new DataListViewSorter();
            ColumnClick += new ColumnClickEventHandler(DataListView_ColumnClick);
            ListViewItemSorter = columnSort;            
        }        /// <summary>
        /// Return Columns for this list. We hide the original so we can associate
        /// a specialised editor with it.
        /// </summary>
        [Editor(typeof(DataColumnCollectionEditor), typeof(UITypeEditor))]
        new public ListView.ColumnHeaderCollection Columns
        {
            get
            {
                return base.Columns;
            }
        }        private void DataListView_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            DataColumnHeader column = Columns[e.Column] as DataColumnHeader;
            if (column == null)
                return;            foreach (ColumnHeader columnHeader in Columns)
                columnHeader.ImageKey = null;
            column.SortOrder = column.SortOrder == SortOrder.Descending ? SortOrder.Ascending : SortOrder.Descending;
            columnSort.SortOrder = column.SortOrder;
            columnSort.Column = e.Column;
            Sort();
        }
    //启用或禁用排序
        public bool EndableSorter
        {
            get { return !(ListViewItemSorter == null); }
            set
            {
                if (value)
                {
                    ListViewItemSorter = columnSort;
                    this.HeaderStyle = ColumnHeaderStyle.Clickable;
                }
                else
                {
                    ListViewItemSorter = null;
                    HeaderStyle = ColumnHeaderStyle.Nonclickable;
                }
            }
        }    }    internal class DataColumnCollectionEditor : CollectionEditor
    {
        public DataColumnCollectionEditor(Type t)
            : base(t)
        {
        }        protected override Type CreateCollectionItemType()
        {
            return typeof(DataColumnHeader);
        }
    }

解决方案 »

  1.   

    public class DataListViewSorter : IComparer
        {
            private SortOrder sortOrder;
            private int column;
            private TravelListItemComparer numberComparer;        internal DataListViewSorter()
            {
                numberComparer = new TravelListItemComparer();
            }        public int Compare(object x, object y)
            {
                int compareResult;
                string first, secondly;
                ListViewItem item = x as ListViewItem;
                first = item == null ? string.Empty : item.SubItems[column].Text;
                item = y as ListViewItem;
                secondly = item == null ? string.Empty : item.SubItems[column].Text;
                compareResult = numberComparer.Compare(first, secondly);
                return sortOrder == SortOrder.Ascending ? compareResult : -compareResult;
            }        public SortOrder SortOrder
            {
                set { sortOrder = value; }
                get { return sortOrder; }
            }        public int Column
            {
                get { return column; }
                set { column = value; }
            }
        }    public class TravelListItemComparer : CaseInsensitiveComparer
        {        public TravelListItemComparer() : base(CultureInfo.InvariantCulture) { }        public new int Compare(object itemX, object itemY)
            {
                if (Information.IsDate(itemX) && Information.IsDate(itemY))
                    return base.Compare(Convert.ToDateTime(itemX), Convert.ToDateTime(itemY));
                else if (!Information.IsNumeric(itemX) || !Information.IsNumeric(itemY))
                    return base.Compare(itemX, itemY);
                return base.Compare(
                    Convert.ToDouble(itemX, CultureInfo.InvariantCulture),
                    Convert.ToDouble(itemY, CultureInfo.InvariantCulture));
            }
        }
      

  2.   

    public class DataColumnHeader : ColumnHeader
        {
            /// <summary>
            /// 构造
            /// </summary>
            /// <param name="text">列标题名称</param>
            public DataColumnHeader(string text)
                : base()
            {
                this.Text = text;
            }        /// <summary>
            /// 构造
            /// </summary>
            public DataColumnHeader() : base() { }        /// <summary>
            /// 
            /// </summary>
            /// <param name="text">列标题名称</param>
            /// <param name="width">列宽</param>
            public DataColumnHeader(string text, int width)
                : this(text)
            {
                this.Width = width;
            }        private SortOrder sortOrder;        /// <summary>
            /// 获取或设置列当前的排序方式
            /// </summary>
            public SortOrder SortOrder
            {
                get { return sortOrder; }
                set
                {
                    sortOrder = value;
                    ImageKey = sortOrder.ToString();
                }
            }        /// <summary>
            /// 
            /// </summary>
            /// <param name="text">列标题名称</param>
            /// <param name="width">列宽</param>
            /// <param name="textAlign">列内容位置</param>
            public DataColumnHeader(string text, int width, HorizontalAlignment textAlign)
                : this(text, width)
            {
                this.TextAlign = textAlign;
            }
        }