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

[点晴永久免费OA]在C#中实现对ListView点击列标题自动排序功能

admin
2022年12月22日 20:11 本文热度 890
首先定义一个ListViewHelper类,代码如下:
using System;
using System.Collections;
using System.Data;
using System.Windows.Forms;
using System.Drawing;

namespace Common
...{
    /**//// <summary>
    /// 模块编号:
    /// 模块功能:对ListView的封装
    /// 作      者:雷友兵
    /// 编写时间:2007-1-10
     /// </summary>
     public class ListViewHelper
    ...{
        /**//// <summary>
        /// 构造函数
         /// </summary>
         public ListViewHelper()
        ...{
            //
             // TODO: 在此处添加构造函数逻辑
             //
         }

        public static void ListView_ColumnClick(object sender, ColumnClickEventArgs e)
        ...{
            ListView lv = sender as ListView;
            // 检查点击的列是不是现在的排序列.
             if (e.Column == (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn)
            ...{
                // 重新设置此列的排序方法.
                 if ((lv.ListViewItemSorter as ListViewColumnSorter).Order == SortOrder.Ascending)
                ...{
                    (lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Descending;
                }
                else
                ...{
                    (lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;
                }
            }
            else
            ...{
                // 设置排序列,默认为正向排序
                 (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn = e.Column;
                (lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;
            }
            // 用新的排序方法对ListView排序
             ((ListView)sender).Sort();
        }
    }

    /**//// <summary>
    /// 继承自IComparer
     /// </summary>
     public class ListViewColumnSorter : IComparer
    ...{
        /**//// <summary>
        /// 指定按照哪个列排序
         /// </summary>
         private int ColumnToSort;

        /**//// <summary>
        /// 指定排序的方式
         /// </summary>
         private SortOrder OrderOfSort;

        /**//// <summary>
        /// 声明CaseInsensitiveComparer类对象,
         /// 参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm
         /// </summary>
         private CaseInsensitiveComparer ObjectCompare;

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

        /**//// <summary>
        /// 重写IComparer接口.
         /// </summary>
         /// <param name="x">要比较的第一个对象</param>
         /// <param name="y">要比较的第二个对象</param>
         /// <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;
            }
        }
        /**//// <summary>
        /// 获取或设置按照哪一列排序.
         /// </summary>
         public int SortColumn
        ...{
            set
            ...{
                ColumnToSort = value;
            }
            get
            ...{
                return ColumnToSort;
            }
        }
        /**//// <summary>
        /// 获取或设置排序方式.
         /// </summary>
         public SortOrder Order
        ...{
            set
            ...{
                OrderOfSort = value;
            }
            get
            ...{
                return OrderOfSort;
            }
        }
    }
}

以上代码封装后无须更改,在窗体中添加一个ListView控件,在窗体的Load事件中添加如下代码:

private   void  Form1_Load( object  sender, EventArgs e)
{
    
 this .listView1.ListViewItemSorter  =   new  Common.ListViewColumnSorter();
    
 this .listView1.ColumnClick  +=   new  ColumnClickEventHandler(Common.ListViewHelper.ListView_ColumnClick);
}

运行一下,看看ListView单击列标题时是不是已经实现自动排序了?


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