ListView 排序

ListView 排序

声明一下,本人在日文系统上做开发,所以,发个日文代码,主要功能实现对LISTVIEW的单击列时进行排序,

首先重写一个类,然在事件中写入下面代码就可以了.

        private void lstTest1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
        {
            // リストビュー選択の場合
            if (lstTest1.SelectedItems.Count != 0)
            {
                lstTest1.SelectedItems.Clear();
            }

            //
            if (e.Column != m_iSortColumn)
            {
                m_iSortColumn = e.Column;

                // 指定ソート種類
                lstTest1.Sorting = SortOrder.Ascending;
            }
            else
            {

                // 前のソート型によって、指定列のソート型を設定
                if (lstTest1.Sorting == SortOrder.Ascending)
                {
                    lstTest1.Sorting = SortOrder.Descending;
                }
                else     
                {
                    lstTest1.Sorting = SortOrder.Ascending;
                }

            }

            // ソート処理を実行
            lstTest1.Sort();

            // 指定列によって、ソートを実行
            lstTest1.ListViewItemSorter =
                new JasPine.ListViewItemComparer(e.Column,lstTest1.Sorting);  

       
        }

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

namespace JasPine
{
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;

// 排序实现类

    //********************************************************************
    /// <summary>
    /// FormCommon の概要の説明です。
    /// </summary>
    //********************************************************************
    public class FormCommon
    {
        public FormCommon()
        {
            //
            // TODO: コンストラクタ ロジックをここに追加してください。
            //
        }
    }

    //********************************************************************
    /// <summary>
    /// リストビューのソートのクラスである。
    /// </summary>
    //********************************************************************
    public class ListViewItemComparer : IComparer
    {
        // リストビューの列を指定
        private int m_iColumn; 

        // ソート種類を指定
        private SortOrder m_Order;

        //********************************************************************
        /// <summary>
        /// リストビューのソートのコンストラクタ。
        /// </summary>
        //********************************************************************
        public ListViewItemComparer()
        {     
            m_iColumn = 0;     
            m_Order = SortOrder.Ascending;     
        }

        //********************************************************************
        /// <summary>
        /// リストビューのソートのコンストラクタ。
        /// </summary>
        /// <param name="iColumn">リストビューの列を指定する</param>
        /// <param name="oOrder">ソート種類を指定する</param>
        //********************************************************************
        public ListViewItemComparer(int iColumn, SortOrder oOrder)
        {
            m_iColumn = iColumn;
            m_Order = oOrder;
        }

        //********************************************************************
        /// <summary>
        /// 比較処理
        /// </summary>
        /// <param name="x">比較対象</param>
        /// <param name="y">比較対象</param>
        /// <returns></returns>
        //********************************************************************
        public int Compare2(object x, object y)
        {     
            int iReturnVal = -1;

            // 比較処理
            iReturnVal = String.Compare(
                ((ListViewItem)x).SubItems[m_iColumn].Text,
                ((ListViewItem)y).SubItems[m_iColumn].Text);

            // 降順を設定
            if(m_Order == SortOrder.Descending)
            { 
                iReturnVal *= -1;
            }
            return iReturnVal;
        }

        //************************************************************************
        /// <summary>
        /// 比較処理
        /// </summary>
        /// <param name="x">比較対象: x </param>
        /// <param name="y">比較対象: y </param>
        /// <returns>正数: x より小さい y 0: x と等しい y 負数: x より大きい y
        /// </returns>
        //************************************************************************
        public int Compare(object x, object y)
        {
            // 返却値
            int iReturnVal = -1;

            // 比較対象
            string strTemp1 = ((ListViewItem)x).SubItems[m_iColumn].Text;
            string strTemp2 = ((ListViewItem)y).SubItems[m_iColumn].Text;

            try
            {
                // タイプの変換
                Convert.ToInt64(strTemp1);
                Convert.ToInt64(strTemp2);

                // 同じ長さの変換
                if (strTemp1.Length > strTemp2.Length)
                {
                    strTemp2 = strTemp2.PadLeft(strTemp1.Length,'0');
                }
                else
                {
                    strTemp1 = strTemp1.PadLeft(strTemp2.Length,'0');
                }

                // 数字の大小の比較
                iReturnVal = String.Compare(strTemp1,strTemp2);
            }
            catch
            {
                // 変換異常の場合、AscII の比較
                // 比較処理
                iReturnVal = String.Compare(strTemp1,strTemp2);
            }

            // 降順を設定
            if(m_Order == SortOrder.Descending)
            { 
                iReturnVal *= -1;
            }
            return iReturnVal;
        }
    }  
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值