private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            ColumnSort columnsort = new ColumnSort(e.Column);
            columnsort.bAscending = (listView1.Sorting == SortOrder.Ascending);
            if (columnsort.bAscending)
            {
                listView1.Sorting = SortOrder.Descending;
            }
            else
            {
                listView1.Sorting = SortOrder.Ascending;
            }
            listView1.ListViewItemSorter = columnsort;   
        }
        public class ColumnSort : IComparer
        {
            private int columnNum = 0;
            public bool bAscending = true;
            public ColumnSort(int column_to_sort)
            {
                columnNum = column_to_sort;
            }            public int Compare(object a, object b)
            {
                System.Windows.Forms.ListViewItem
                listItemA = (System.Windows.Forms.ListViewItem)a;
                System.Windows.Forms.ListViewItem
                listItemB = (System.Windows.Forms.ListViewItem)b;
                if (bAscending)
                {
                    return String.Compare(listItemA.SubItems[columnNum].ToString(), listItemB.SubItems[columnNum].ToString());
                }
                else
                {
                    return -1 * String.Compare(listItemA.SubItems[columnNum].ToString(), listItemB.SubItems[columnNum].ToString());
                }
            }
        }这段代码是百度搜到的关于listview排序的,但是我不太懂这段代码,而且发现在程序运行中经常出现bug,敬请高手指教!

解决方案 »

  1.   

    说明:没看代码撒
     
    但listview本身有一个属性sorting,就可以根据item自动排序
      

  2.   

    Winform中的ListView排序是一种常用的功能,下面是例子代码,放上来留个备份
    using System;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Collections;namespace ListViewSortFormNamespace

        public class ListViewSortForm : Form
        {
            private ListView listView1;
           
            public ListViewSortForm()
            {
                ListViewItem listViewItem1 = new ListViewItem(new string[] {"Banana","a","b","c"}, -1, Color.Empty, Color.Yellow, null);
                ListViewItem listViewItem2 = new ListViewItem(new string[] {"Cherry","v","g","t"}, -1, Color.Empty, Color.Red, new Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((System.Byte)(0))));
                ListViewItem listViewItem3 = new ListViewItem(new string[] {"Apple","h","j","n"}, -1, Color.Empty, Color.Lime, null);
                ListViewItem listViewItem4 = new ListViewItem(new string[] {"Pear","y","u","i"}, -1, Color.Empty, Color.FromArgb(((System.Byte)(192)), ((System.Byte)(128)), ((System.Byte)(156))), null);
         
                this.listView1 = new ListView();            this.listView1.Sorting = SortOrder.None;
                this.listView1.View = View.Details;
                this.listView1.Columns.Add(new ColumnHeader());
                this.listView1.Columns[0].Text = "Column 1";
                this.listView1.Columns[0].Width = 100;
                listView1.Columns.Add(new ColumnHeader());
                listView1.Columns[1].Text = "Column 2";
                listView1.Columns.Add(new ColumnHeader());
                listView1.Columns[2].Text = "Column 3";
                listView1.Columns.Add(new ColumnHeader());
                listView1.Columns[3].Text = "Column 4";
                this.SuspendLayout();
                this.listView1.Items.AddRange(new ListViewItem[] {listViewItem1,
                    listViewItem2,
                    listViewItem3,
                    listViewItem4});
                this.listView1.Location = new Point(10, 10);
                this.listView1.Name = "listView1";
                this.listView1.Size = new Size(300, 100);
                this.listView1.TabIndex = 0;
                this.listView1.LabelEdit = true;
                this.listView1.ColumnClick += new ColumnClickEventHandler(ColumnClick);
                   
                this.ClientSize = new Size(400, 400);
                this.Controls.AddRange(new Control[] {this.listView1});
                this.Name = "ListViewSortForm";
                this.Text = "Sorted ListView Control";
                this.ResumeLayout(false);
            }
            
        
            // ColumnClick event handler.
            private void ColumnClick(object o, ColumnClickEventArgs e)
            {
                this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column);
            }        [System.STAThreadAttribute()]
            public static void Main()
            {
                Application.Run(new ListViewSortForm());
            }    }    // 自定义排序算法
        class ListViewItemComparer : IComparer
        {
            private int col;
            public ListViewItemComparer()
            {
                col = 0;
            }
            public ListViewItemComparer(int column)
            {
                col = column;
            }
            public int Compare(object x, object y)
            {
                return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
            }
        }}
      

  3.   

    出处:http://www.cnblogs.com/dahuzizyd/archive/2006/11/02/Winform_ListView_Sort.html