1聲明
private ListViewColumnSorter lvwColumnSorter;
2窗體構造函數添加下面代碼
// 創建一個ListView排序類的對象,並設置listView1的排序器
lvwColumnSorter = new ListViewColumnSorter();
this.listView1.ListViewItemSorter = lvwColumnSorter;
lvwColumnSorter = new ListViewColumnSorter();
this.listView1.ListViewItemSorter = lvwColumnSorter;
// 檢查點擊的列是不是現在的排序列.
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();
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();
using System.Collections;
using System.Windows.Forms;
/// <summary>
/// 繼承自IComparer
/// </summary>
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;
// 比較
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;
}
}
}
using System.Windows.Forms;
/// <summary>
/// 繼承自IComparer
/// </summary>
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;
// 比較
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;
}
}
}