donqiang的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

      

        private class ListViewColumnSorter : System.Collections.IComparer
        {
            /// <summary>
            /// 设置要排序的列
            /// </summary>
            public int ColumnToSort;
            /// <summary>
            /// 设置排序顺序
            /// </summary>
            public System.Windows.Forms.SortOrder OrderOfSort;
            /// <summary>
            /// 大小写不敏感的比较对象
            /// </summary>
            private System.Collections.CaseInsensitiveComparer ObjectCompare;

            /// <summary>
            /// 构造
            /// </summary>
            public ListViewColumnSorter()
            {
                // 初始排序列号为0
                ColumnToSort = 0;

                // 初始设置为不排序
                OrderOfSort = System.Windows.Forms.SortOrder.None;

                // Initialize the CaseInsensitiveComparer object
                ObjectCompare = new System.Collections.CaseInsensitiveComparer();
            }

            /// <summary>
            /// 该方法继承自IComparer接口。它通过比较两个对象使用不区分大小写的比较。
            /// </summary>
            /// <param name="x">第一项</param>
            /// <param name="y">第二项</param>
            /// <returns>比较的结果。 “0“相等,负:X<Y,正X>Y
            public int Compare(object x, object y)
            {
                int compareResult;

                ListViewItem listviewX = (ListViewItem)x;
                ListViewItem listviewY = (ListViewItem)y;

                if (ColumnToSort > 0 || listviewX.SubItems.Count==1)
                {
                    // 不区分大小写比较
                    compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
                }
                else
                {
                    int a = int.Parse(listviewX.SubItems[ColumnToSort].Text);
                    compareResult = a.CompareTo(int.Parse(listviewY.SubItems[ColumnToSort].Text));
                }

                // 计算对象比较的返回值
                if (OrderOfSort == System.Windows.Forms.SortOrder.Ascending)
                {
                    // 如果是升序
                    return compareResult;
                }
                else if (OrderOfSort == System.Windows.Forms.SortOrder.Descending)
                {
                    // 如果是降序
                    return (-compareResult);
                }
                else
                {
                    // 不比较
                    return 0;
                }
            }

        }

 

posted on 2011-01-25 16:51  donqiang  阅读(633)  评论(0编辑  收藏  举报