狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴永久免費OA]在C#中實現對ListView點擊列標題自動排序功能

admin
2022年12月22日 20:11 本文熱度 958
首先定義一個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-2025 ClickSun All Rights Reserved