C# listview实现排序[存档]

C# Listview 排序

 

 

1.添加一个类

using System.Collections;

using System.Windows.Forms;

 

public class ListViewColumnSorter : IComparer

{

 /**//// <summary>

 /// 指定按照哪个列排序

 /// </summary>

 private int ColumnToSort;

 /**//// <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;

 

  // 比较

  compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text,listviewY.SubItems[ColumnToSort].Text);

 

  // 根据上面的比较结果返回正确的比较结果

  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;

  }

 }

 

}

 

 

 

 

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

 

2 声明:

 

private ListViewColumnSorter lvwColumnSorter;

3 窗体构造函数添加下面代码:

 

// 创建一个ListView排序类的对象,并设置listView1的排序器

lvwColumnSorter = new ListViewColumnSorter();

this.listView1.ListViewItemSorter = lvwColumnSorter;

3.在listView1的ColumnClick事件中添加以下代码: // 检查点击的列是不是现在的排序列.

if ( e.Column == lvwColumnSorter.SortColumn )

{

 // 重新设置此列的排序方法.

 if (lvwColumnSorter.Order == SortOrder.Ascending)

 {

  lvwColumnSorter.Order = SortOrder.Descending;

 }

 else

 {

  lvwColumnSorter.Order = SortOrder.Ascending;

 }

}

else

{

 // 设置排序列,默认为正向排序

 lvwColumnSorter.SortColumn = e.Column;

 lvwColumnSorter.Order = SortOrder.Ascending;

}

 

// 用新的排序方法对ListView排序

this.listView.Sort();

 

你可能感兴趣的:(C# listview实现排序[存档])