ListView 排序

#region ListView 排序
        private int sortColumn = -1;
        private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
        {
          
            if (e.Column != sortColumn)
            {
                // Set the sort column to the new column.
                sortColumn = e.Column;
                // Set the sort order to ascending by default.
                listView1.Sorting = SortOrder.Ascending;
            }
            else
            {
                // Determine what the last sort order was and change it.
                if (listView1.Sorting == SortOrder.Ascending)
                    listView1.Sorting = SortOrder.Descending;
                else
                    listView1.Sorting = SortOrder.Ascending;
            }
            // Call the sort method to manually sort.
            listView1.Sort();
            // Set the ListViewItemSorter property to a new ListViewItemComparer
            // object.
            this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column, listView1.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;
            }
         }

        #endregion

posted on 2011-05-18 09:59  缘来  阅读(336)  评论(0)    收藏  举报

导航