C#中listview控件实现按照文本、数字、时间升序和降序排序
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
【问题】:
当点击列标题的时候,能够完成对该列排序,再次点击,按照该列反序排序。
【解决方法】:
使用 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()// 构造函数
{
ColumnToSort = 0;// 默认按第一列排序
OrderOfSort = SortOrder.None;// 排序方式为不排序
ObjectCompare = new CaseInsensitiveComparer();// 初始化CaseInsensitiveComparer类对象 } // 重写IComparer接口.
// <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;
} } /// 获取或设置按照哪一列排序.
public int SortColumn { set { ColumnToSort = value; }
get
{
return ColumnToSort;
} } /// 获取或设置排序方式.
public SortOrder Order { set {
OrderOfSort = value;
}
get
{
return OrderOfSort;
} } } } ================================ 页面代码: namespace sortListView {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 创建一个ListView排序类的对象,并设置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) { // 检查点击的列是不是现在的排序列. 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.listView1.Sort(); } private void button1_Click(object sender, EventArgs e)
{
Form2 obj = new Form2();
obj.Show(); } } } 该文章在 2023/11/2 15:20:15 编辑过 |
关键字查询
相关文章
正在查询... |