C#中l(wèi)istview控件實(shí)現(xiàn)按照文本、數(shù)字、時(shí)間升序和降序排序
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
【問(wèn)題】:
當(dāng)點(diǎn)擊列標(biāo)題的時(shí)候,能夠完成對(duì)該列排序,再次點(diǎn)擊,按照該列反序排序。
【解決方法】:
使用 IComparer接口。
例子: 新建一個(gè)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;// 指定按照哪個(gè)列排序
private SortOrder OrderOfSort;// 指定排序的方式 private CaseInsensitiveComparer ObjectCompare;// 聲明CaseInsensitiveComparer類對(duì)象 public ListViewColumnSorter()// 構(gòu)造函數(shù)
{
ColumnToSort = 0;// 默認(rèn)按第一列排序
OrderOfSort = SortOrder.None;// 排序方式為不排序
ObjectCompare = new CaseInsensitiveComparer();// 初始化CaseInsensitiveComparer類對(duì)象 } // 重寫IComparer接口.
// <returns>比較的結(jié)果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
public int Compare(object x, object y) { int compareResult; ListViewItem listviewX, listviewY;
// 將比較對(duì)象轉(zhuǎn)換為L(zhǎng)istViewItem對(duì)象
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;
// 比較
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
// 根據(jù)上面的比較結(jié)果返回正確的比較結(jié)果
if (OrderOfSort == SortOrder.Ascending) { // 因?yàn)槭钦蚺判?,所以直接返回結(jié)果 return compareResult;
}
else if (OrderOfSort == SortOrder.Descending) { // 如果是反序排序,所以要取負(fù)值再返回 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;
} } } } ================================ 頁(yè)面代碼: namespace sortListView {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 創(chuàng)建一個(gè)ListView排序類的對(duì)象,并設(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) { // 檢查點(diǎn)擊的列是不是現(xiàn)在的排序列. if (e.Column == lvwColumnSorter.SortColumn)
{
// 重新設(shè)置此列的排序方法.
if (lvwColumnSorter.Order == SortOrder.Ascending) { lvwColumnSorter.Order = SortOrder.Descending; }
else { lvwColumnSorter.Order = SortOrder.Ascending; }
}
else
{
// 設(shè)置排序列,默認(rèn)為正向排序
lvwColumnSorter.SortColumn = e.Column;
lvwColumnSorter.Order = SortOrder.Ascending;
}
// 用新的排序方法對(duì)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ò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |