12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- namespace LYFZ.ComponentLibrary
- {
- 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;
- // 比较
- if (LYFZ.Command.Command_Validate.IsNumeric(listviewX.SubItems[ColumnToSort].Text.Trim()) && LYFZ.Command.Command_Validate.IsNumeric(listviewY.SubItems[ColumnToSort].Text.Trim()))
- { compareResult = ObjectCompare.Compare(Convert.ToDecimal(listviewX.SubItems[ColumnToSort].Text.Trim()), Convert.ToDecimal(listviewY.SubItems[ColumnToSort].Text.Trim())); }
- else
- { compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text.Trim(), listviewY.SubItems[ColumnToSort].Text.Trim()); }
- // 根据上面的比较结果返回正确的比较结果
- 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; }
- }
- }
- }
|