ASP.NET面试题:ListView扩展

公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路 ?

直接放上代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestListView
{
    public partial class ListViewEx : ListView
    {
        protected override void OnColumnClick(ColumnClickEventArgs e)
        {
            if (this.ListViewItemSorter == null)
            {
                this.ListViewItemSorter = new ListViewItemComparer(e.Column, SortOrder.Ascending);

            }
            else
            {
                ListViewItemComparer comparer = this.ListViewItemSorter as ListViewItemComparer;
                if (comparer.SortColumn == e.Column)
                {
                    if (comparer.Order == SortOrder.Ascending)
                    {
                        comparer.Order = SortOrder.Descending;
                    }
                    else
                    {
                        comparer.Order = SortOrder.Ascending;
                    }
                }
                else
                {

                    comparer.SortColumn = e.Column;

                    comparer.Order = SortOrder.Ascending;

                }
                this.Sort();

            }

        }

        private class ListViewItemComparer : System.Collections.IComparer
        {

            public int SortColumn
            {

                get;

                set;

            }

 

            public SortOrder Order
            {

                get;

                set;

            }


            /// <summary>
            /// 比较器构造函数
            /// </summary>
            /// <param name="column"></param>
            public ListViewItemComparer()
            {

                this.SortColumn = 0;

                this.Order = SortOrder.None;

            }

            public ListViewItemComparer(int column)

                : this()
            {

                this.SortColumn = column;

            }

            public ListViewItemComparer(int column, SortOrder sortOrder)

                : this(column)
            {

                this.Order = sortOrder;

            }


            /// <summary>
            /// 实现比较器接口的方法
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            int System.Collections.IComparer.Compare(object x, object y)
            {
                int result = string.Compare(((ListViewItem)x).SubItems[this.SortColumn].Text, ((ListViewItem)y).SubItems[this.SortColumn].Text);

                if (this.Order == SortOrder.Ascending)
                {

                    return result;

                }

                else if (this.Order == SortOrder.Descending)
                {

                    return (-result);

                }

                else
                {

                    return 0;

                }

            }
        }
    }

  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值