LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#中listview控件实现按照文本、数字、时间升序和降序排序

admin
2023年11月2日 15:10 本文热度 540
【问题】:
当点击列标题的时候,能够完成对该列排序,再次点击,按照该列反序排序。

 

【解决方法】:
使用  IComparer接口

 

例子:

新建一个class类:

using System;

using System.Collections.Generic;
using System.Text;
using System.Collections;

using System.Windows.Forms;


namespace sortListView
{
  class ListViewColumnSorter: IComparer
  {      
    private int ColumnToSort;// 指定按照哪个列排序  
    private SortOrder OrderOfSort;// 指定排序的方式          

    private CaseInsensitiveComparer ObjectCompare;// 声明CaseInsensitiveComparer类对象

    public ListViewColumnSorter()// 构造函数
    {        
        ColumnToSort = 0;// 默认按第一列排序    
        OrderOfSort = SortOrder.None;// 排序方式为不排序        
      ObjectCompare = new CaseInsensitiveComparer();// 初始化CaseInsensitiveComparer类对象

    }


    // 重写IComparer接口.    
    // <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
    public int Compare(object x, object y)

    {

        int compareResult;

        ListViewItem listviewX, listviewY;
        // 将比较对象转换为ListViewItem对象
        listviewX = (ListViewItem)x;
        listviewY = (ListViewItem)y;
        // 比较
        compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
        // 根据上面的比较结果返回正确的比较结果
        if (OrderOfSort == SortOrder.Ascending)

        {

            // 因为是正序排序,所以直接返回结果

            return compareResult;
        }
        else if (OrderOfSort == SortOrder.Descending)

        {

            // 如果是反序排序,所以要取负值再返回

            return (-compareResult);
        }
        else
        {
            // 如果相等返回0
            return 0;
        }

    }


    /// 获取或设置按照哪一列排序.    
    public int SortColumn

    {

        set

        {

             ColumnToSort = value;

        }
        get
        {
            return ColumnToSort;
        }

    }


    /// 获取或设置排序方式.  
    public SortOrder Order

    {

        set

        {
            OrderOfSort = value;
        }
        get
        {
            return OrderOfSort;
        }

    }

   }

}

================================

页面代码:

namespace sortListView

{
  public partial class Form1 : Form
  {
      public Form1()
      {
        InitializeComponent();
        // 创建一个ListView排序类的对象,并设置listView1的排序器
        lvwColumnSorter = new ListViewColumnSorter();
        this.listView1.ListViewItemSorter = lvwColumnSorter;

      }


      private void Form1_Load(object sender, EventArgs e)

      {

       //初始化listview1.

      }


      private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)

      {

       // 检查点击的列是不是现在的排序列.

        if (e.Column == lvwColumnSorter.SortColumn)
        {
            // 重新设置此列的排序方法.
            if (lvwColumnSorter.Order == SortOrder.Ascending)

            {

               lvwColumnSorter.Order = SortOrder.Descending;

            }
            else

            {

               lvwColumnSorter.Order = SortOrder.Ascending;

            }
        }
        else
        {
            // 设置排序列,默认为正向排序
            lvwColumnSorter.SortColumn = e.Column;
            lvwColumnSorter.Order = SortOrder.Ascending;
        }
        // 用新的排序方法对ListView排序
        this.listView1.Sort();      

    }


    private void button1_Click(object sender, EventArgs e)
    {
        Form2 obj = new Form2();
        obj.Show();

    }

  }

}


该文章在 2023/11/2 15:20:15 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved