在http://blog.csdn.net/spkl1/archive/2007/01/09/1478400.aspx的基础上有所改动!
可以,将多个listView同时关联到这一个事件,判断是那个listView的排序,再执行排序!
如有侵权,请与我联系!


        private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            
int sortColumn = e.Column;
            ListView listView 
= (ListView)sender;

            
if (listView.Name == "listView2")
            {
                
if (listView2.Sorting == SortOrder.Ascending)
                    listView2.Sorting 
= SortOrder.Descending;
                
else
                    listView2.Sorting 
= SortOrder.Ascending;

                
this.listView2.ListViewItemSorter = new ListViewItemComparer(e.Column, listView2.Sorting);
            }
            
else if (listView.Name == "listView3")
            {
                
if (listView3.Sorting == SortOrder.Ascending)
                    listView3.Sorting 
= SortOrder.Descending;
                
else
                    listView3.Sorting 
= SortOrder.Ascending;

                
this.listView3.ListViewItemSorter = new ListViewItemComparer(e.Column, listView3.Sorting);
            }
            
else if (listView.Name == "listView4")
            {
                
if (listView4.Sorting == SortOrder.Ascending)
                    listView4.Sorting 
= SortOrder.Descending;
                
else
                    listView4.Sorting 
= SortOrder.Ascending;

                
this.listView4.ListViewItemSorter = new ListViewItemComparer(e.Column, listView4.Sorting);
            }
            
else if (listView.Name == "listView5")
            {
                
if (listView5.Sorting == SortOrder.Ascending)
                    listView5.Sorting 
= SortOrder.Descending;
                
else
                    listView5.Sorting 
= SortOrder.Ascending;

                
this.listView5.ListViewItemSorter = new ListViewItemComparer(e.Column, listView5.Sorting);
            }
        }

        
class ListViewItemComparer : System.Collections.IComparer
        {
            
private int col;
            
private SortOrder order;
            
public ListViewItemComparer()
            {
                col 
= 0;
                order 
= SortOrder.Ascending;
            }
            
public ListViewItemComparer(int column, SortOrder order)
            {
                col 
= column;
                
this.order = order;
            }
            
public int Compare(object x, object y)
            {
                
int returnVal;
                
decimal w;
                DateTime r;
                
bool k = Decimal.TryParse(((ListViewItem)x).SubItems[col].Text, out w);
                
bool s = DateTime.TryParse(((ListViewItem)x).SubItems[col].Text, out r);
                
if (k == true && order != SortOrder.Descending)//数字正排序
                {
                    Decimal k1 
= Int32.Parse(((ListViewItem)x).SubItems[col].Text);
                    Decimal k2 
= Int32.Parse(((ListViewItem)y).SubItems[col].Text);
                    
if (k2 > k1)
                        returnVal 
= -1;
                    
if (k2 < k1)
                        returnVal 
= 1;
                    
else
                        returnVal 
= 0;
                }
                
else
                {
                    
if (s == true)//时间排序
                    {
                        System.DateTime firstDate 
= DateTime.Parse(((ListViewItem)x).SubItems[col].Text);
                        System.DateTime secondDate 
= DateTime.Parse(((ListViewItem)y).SubItems[col].Text);
                        returnVal 
= DateTime.Compare(firstDate, secondDate);
                    }
                    
else//字符排序
                    {
                        returnVal 
= String.Compare(((ListViewItem)x).SubItems[col].Text,
                                    ((ListViewItem)y).SubItems[col].Text);
                    }
                }

                
if (order == SortOrder.Descending)
                {
                    
if (k == true)//数字倒排序
                    {
                        System.Int32 k3 
= Int32.Parse(((ListViewItem)x).SubItems[col].Text);
                        System.Int32 k4 
= Int32.Parse(((ListViewItem)y).SubItems[col].Text);
                        
if (k3 > k4)
                            returnVal 
= 1;
                        
if (k3 < k4)
                            returnVal 
= -1;
                        
else
                            returnVal 
= 0;
                    }
                    returnVal 
*= -1;
                }
                
return returnVal;
            }
        }