[點晴永久免費OA]在C#中實現對ListView點擊列標題自動排序功能
當前位置:點晴教程→點晴OA辦公管理信息系統
→『 經驗分享&問題答疑 』
首先定義一個ListViewHelper類,代碼如下:
using System;
using System.Collections;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
namespace Common
...{
/**//// <summary>
/// 模塊編號:
/// 模塊功能:對ListView的封裝
/// 作 者:雷友兵
/// 編寫時間:2007-1-10
/// </summary>
public class ListViewHelper
...{
/**//// <summary>
/// 構造函數
/// </summary>
public ListViewHelper()
...{
//
// TODO: 在此處添加構造函數邏輯
//
}
public static void ListView_ColumnClick(object sender, ColumnClickEventArgs e)
...{
ListView lv = sender as ListView;
// 檢查點擊的列是不是現在的排序列.
if (e.Column == (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn)
...{
// 重新設置此列的排序方法.
if ((lv.ListViewItemSorter as ListViewColumnSorter).Order == SortOrder.Ascending)
...{
(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Descending;
}
else
...{
(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;
}
}
else
...{
// 設置排序列,默認為正向排序
(lv.ListViewItemSorter as ListViewColumnSorter).SortColumn = e.Column;
(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;
}
// 用新的排序方法對ListView排序
((ListView)sender).Sort();
}
}
/**//// <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;
}
}
}
} 以上代碼封裝后無須更改,在窗體中添加一個ListView控件,在窗體的Load事件中添加如下代碼: private void Form1_Load( object sender, EventArgs e) { this .listView1.ListViewItemSorter = new Common.ListViewColumnSorter(); this .listView1.ColumnClick += new ColumnClickEventHandler(Common.ListViewHelper.ListView_ColumnClick); } 該文章在 2022/12/22 20:11:59 編輯過 |
關鍵字查詢
相關文章
正在查詢... |