国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#:ListView控件如何實現點擊列表頭進行排序?

2019-11-17 03:19:26
字體:
來源:轉載
供稿:網友

C#:ListView控件如何實現點擊列表頭進行排序?

using System;using System.Collections;using System.Windows.Forms;namespace Common{    /// <summary>    /// 對ListView點擊列標題自動排序功能    /// </summary>    public class ListViewHelper    {        /// <summary>        /// 構造函數        /// </summary>        public ListViewHelper()        {            //            // TODO: 在此處添加構造函數邏輯            //        }        public static void ListView_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)        {            System.Windows.Forms.ListView lv = sender as System.Windows.Forms.ListView;            // 檢查點擊的列是不是現在的排序列.            if (e.Column == (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn)            {                // 重新設置此列的排序方法.                if ((lv.ListViewItemSorter as ListViewColumnSorter).Order == System.Windows.Forms.SortOrder.Ascending)                {                    (lv.ListViewItemSorter as ListViewColumnSorter).Order = System.Windows.Forms.SortOrder.Descending;                }                else                {                    (lv.ListViewItemSorter as ListViewColumnSorter).Order = System.Windows.Forms.SortOrder.Ascending;                }            }            else            {                // 設置排序列,默認為正向排序                (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn = e.Column;                (lv.ListViewItemSorter as ListViewColumnSorter).Order = System.Windows.Forms.SortOrder.Ascending;            }            // 用新的排序方法對ListView排序            ((System.Windows.Forms.ListView)sender).Sort();        }    }    /// <summary>    /// 繼承自IComparer    /// </summary>    public class ListViewColumnSorter : System.Collections.IComparer    {        /// <summary>        /// 指定按照哪個列排序        /// </summary>        PRivate int ColumnToSort;        /// <summary>        /// 指定排序的方式        /// </summary>        private System.Windows.Forms.SortOrder OrderOfsort;        /// <summary>        /// 聲明CaseInsensitiveComparer類對象        /// </summary>        private System.Collections.CaseInsensitiveComparer ObjectCompare;        /// <summary>        /// 構造函數        /// </summary>        public ListViewColumnSorter()        {            // 默認按第一列排序            ColumnToSort = 0;            // 排序方式為不排序            OrderOfSort = System.Windows.Forms.SortOrder.None;            // 初始化CaseInsensitiveComparer類對象            ObjectCompare = new System.Collections.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;            System.Windows.Forms.ListViewItem listviewX, listviewY;            // 將比較對象轉換為ListViewItem對象            listviewX = (System.Windows.Forms.ListViewItem)x;            listviewY = (System.Windows.Forms.ListViewItem)y;            string xText = listviewX.SubItems[ColumnToSort].Text;            string yText = listviewY.SubItems[ColumnToSort].Text;            int xInt, yInt;            // 比較,如果值為ip地址,則根據IP地址的規則排序。            if (IsIP(xText) && IsIP(yText))            {                compareResult = CompareIp(xText, yText);            }            else if (int.TryParse(xText, out xInt) && int.TryParse(yText, out yInt)) //是否全為數字            {                //比較數字                compareResult = CompareInt(xInt, yInt);            }            else            {                //比較對象                compareResult = ObjectCompare.Compare(xText, yText);            }            // 根據上面的比較結果返回正確的比較結果            if (OrderOfSort == System.Windows.Forms.SortOrder.Ascending)            {                // 因為是正序排序,所以直接返回結果                return compareResult;            }            else if (OrderOfSort == System.Windows.Forms.SortOrder.Descending)            {                // 如果是反序排序,所以要取負值再返回                return (-compareResult);            }            else            {                // 如果相等返回0                return 0;            }        }        /// <summary>        /// 判斷是否為正確的IP地址,IP范圍(0.0.0.0~255.255.255)        /// </summary>        /// <param name="ip">需驗證的IP地址</param>        /// <returns></returns>        public bool IsIP(String ip)        {            return System.Text.RegularExpressions.Regex.Match(ip, @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$").Success;        }        /// <summary>        /// 比較兩個數字的大小        /// </summary>        /// <param name="ipx">要比較的第一個對象</param>        /// <param name="ipy">要比較的第二個對象</param>        /// <returns>比較的結果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>        private int CompareInt(int x, int y)        {            if (x > y)            {                return 1;            }            else if (x < y)            {                return -1;            }            else            {                return 0;            }        }        /// <summary>        /// 比較兩個IP地址的大小        /// </summary>        /// <param name="ipx">要比較的第一個對象</param>        /// <param name="ipy">要比較的第二個對象</param>        /// <returns>比較的結果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>        private int CompareIp(string ipx, string ipy)        {            string[] ipxs = ipx.Split('.');            string[] ipys = ipy.Split('.');            for (int i = 0; i < 4; i++)            {                if (Convert.ToInt32(ipxs[i]) > Convert.ToInt32(ipys[i]))                {                    return 1;                }                else if (Convert.ToInt32(ipxs[i]) < Convert.ToInt32(ipys[i]))                {                    return -1;                }                else                {                    continue;                }            }            return 0;        }        /// <summary>        /// 獲取或設置按照哪一列排序.        /// </summary>        public int SortColumn        {            set            {                ColumnToSort = value;            }            get            {                return ColumnToSort;            }        }        /// <summary>        /// 獲取或設置排序方式.        /// </summary>        public System.Windows.Forms.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);}

相關文章:淺談WinForm下ListView的擴展(一):單擊列頭實現排序

轉載自:http://bbs.csdn.net/topics/350071962


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建湖县| 大邑县| 大余县| 龙南县| 平顶山市| 邵阳县| 思南县| 神农架林区| 合肥市| 荣昌县| 民丰县| 汾阳市| 淮阳县| 枣庄市| 茶陵县| 福建省| 翼城县| 东乡族自治县| 横山县| 江油市| 鹰潭市| 阜康市| 光泽县| 乃东县| 兰西县| 钟山县| 秦安县| 利辛县| 渝北区| 巴楚县| 基隆市| 沈阳市| 肇源县| 阜新市| 瑞金市| 灌南县| 彭州市| 若尔盖县| 荔浦县| 玉树县| 通化市|