C#中l(wèi)istview控件實現(xiàn)按照文本、數(shù)字、時間升序和降序排序
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
【問題】:
當點擊列標題的時候,能夠完成對該列排序,再次點擊,按照該列反序排序。
【解決方法】:
使用 IComparer接口。
例子: 新建一個class類: using System; using System.Collections.Generic;
using System.Text;
using System.Collections; using System.Windows.Forms; namespace sortListView
{
class ListViewColumnSorter: IComparer
{
private int ColumnToSort;// 指定按照哪個列排序
private SortOrder OrderOfSort;// 指定排序的方式 private CaseInsensitiveComparer ObjectCompare;// 聲明CaseInsensitiveComparer類對象 public ListViewColumnSorter()// 構(gòu)造函數(shù)
{
ColumnToSort = 0;// 默認按第一列排序
OrderOfSort = SortOrder.None;// 排序方式為不排序
ObjectCompare = new CaseInsensitiveComparer();// 初始化CaseInsensitiveComparer類對象 } // 重寫IComparer接口.
// <returns>比較的結(jié)果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
public int Compare(object x, object y) { int compareResult; ListViewItem listviewX, listviewY;
// 將比較對象轉(zhuǎn)換為ListViewItem對象
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;
// 比較
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
// 根據(jù)上面的比較結(jié)果返回正確的比較結(jié)果
if (OrderOfSort == SortOrder.Ascending) { // 因為是正序排序,所以直接返回結(jié)果 return compareResult;
}
else if (OrderOfSort == SortOrder.Descending) { // 如果是反序排序,所以要取負值再返回 return (-compareResult);
}
else
{
// 如果相等返回0
return 0;
} } /// 獲取或設(shè)置按照哪一列排序.
public int SortColumn { set { ColumnToSort = value; }
get
{
return ColumnToSort;
} } /// 獲取或設(shè)置排序方式.
public SortOrder Order { set {
OrderOfSort = value;
}
get
{
return OrderOfSort;
} } } } ================================ 頁面代碼: namespace sortListView {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 創(chuàng)建一個ListView排序類的對象,并設(shè)置listView1的排序器
lvwColumnSorter = new ListViewColumnSorter();
this.listView1.ListViewItemSorter = lvwColumnSorter; } private void Form1_Load(object sender, EventArgs e) { //初始化listview1. } private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) { // 檢查點擊的列是不是現(xiàn)在的排序列. if (e.Column == lvwColumnSorter.SortColumn)
{
// 重新設(shè)置此列的排序方法.
if (lvwColumnSorter.Order == SortOrder.Ascending) { lvwColumnSorter.Order = SortOrder.Descending; }
else { lvwColumnSorter.Order = SortOrder.Ascending; }
}
else
{
// 設(shè)置排序列,默認為正向排序
lvwColumnSorter.SortColumn = e.Column;
lvwColumnSorter.Order = SortOrder.Ascending;
}
// 用新的排序方法對ListView排序
this.listView1.Sort(); } private void button1_Click(object sender, EventArgs e)
{
Form2 obj = new Form2();
obj.Show(); } } } 該文章在 2023/11/2 15:20:15 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |