111111111111

ListView排序总结

Posted on 2004-06-22 13:35  三岁小孩  阅读(7352)  评论(0编辑  收藏  举报

 ListView排序总结;
ListView的排序还存在一个问题没有解决,当第一列为序号时,要始终保持序号为升序,应该怎样解决?

当Column为动态时,排序会报错,把//this.listView1.ListViewItemSorter = null;放在更新Column之前,就可以解决!
 private int CurrentColumn = -1; //记录上次点击的列号
  private bool b_Convert = false; //记录正逆序信息
  private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
  {
   if(e.Column == CurrentColumn)
   {
    b_Convert = ! b_Convert;
    if(e.Column == 3 ||e.Column == 0)
     this.listView1.ListViewItemSorter = new SortBySubItem(e.Column,b_Convert,1);//数值排序
    else
     this.listView1.ListViewItemSorter = new SortBySubItem(e.Column,b_Convert);//字符排序
   }
   else
   {
    CurrentColumn = e.Column;
    b_Convert = false;
    if(e.Column == 3||e.Column == 0)
     this.listView1.ListViewItemSorter = new SortBySubItem(e.Column,b_Convert,1);
    else
     this.listView1.ListViewItemSorter = new SortBySubItem(e.Column,b_Convert);
   }
  }
 }


 public class SortBySubItem : System.Collections.IComparer
 {
  private int m_Column = 0;
  private int m_SortType = 0;//排序类型
  private bool m_asc = true;
  public SortBySubItem(int Column,bool bAsc)
  {
   m_Column = Column;
   m_asc = bAsc;
  }
  public SortBySubItem(int Column,bool bAsc, int SortType)
  {
   m_Column = Column;
   m_SortType = SortType;
   m_asc = bAsc;
  }
  int IComparer.Compare(object x, object y)
  {
   string item1 = ((ListViewItem)x).SubItems[m_Column].Text.Trim();
   string item2 = ((ListViewItem)y).SubItems[m_Column].Text.Trim();
   int intSort = 0;
   if(!m_asc)//反序
   {
    string temp = item1;
    item1 = item2;
    item2 = temp;
   }

   if(m_SortType == 0)   //字符排序
    intSort = String.Compare(item1,item2);
   else      //数值排序
   {
    double str1 = 0;
    double str2 = 0;
    if(item1 == "")//为空设置为最小
     return 1;
    else if(item2 == "")
     return 0;
    try
    {
     str1 = double.Parse(item1);
     str2 = double.Parse(item2);
    }
    catch
    {
     //转换出错
     return 0;
    }
    if(str1 >=str2)
     return 0;
    else
     return 1;
    
   }
   return intSort;
  }
 }

Copyright © 2024 三岁小孩
Powered by .NET 9.0 on Kubernetes

2222222222222222222