若要自定义排序顺序,必须编写一个实现 IComparer 接口的类,并将 ListViewItemSorter 属性设置为该类的一个对象。
当设置 ListViewItemSorter 属性值时,将自动调用 Sort 方法。

实现 IComparer 接口的类:

//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
using System.Collections;
using System.Windows.Forms; namespace APIdesktop54
{
public class ListViewColumnSorter:IComparer
{
private int sortColumn; //指定按照哪个列排序
private SortOrder order; //指定排序的方式 public int SortColumn
{
get
{
return sortColumn;
} set
{
sortColumn = value;
}
} public SortOrder Order
{
get {
return order;
}
set
{
order = value;
}
} private CaseInsensitiveComparer ObjectCompare; //声明 CaseInsensitiveComparer 类对象
/// <summary>
/// 构造函数
/// </summary>
public ListViewColumnSorter()
{
sortColumn = ; //默认按第一列排序
order = SortOrder.None; //排序方式为不排序
ObjectCompare = new CaseInsensitiveComparer(); //初始化 CaseInsensitiveComparer 类对象
} public int Compare(object x,object y)
{
int compareResult;
ListViewItem listviewX, listviewY; //将比较对象转换为ListViewItem对象
listviewX=(ListViewItem)x;
listviewY=(ListViewItem)y; //比较
compareResult = ObjectCompare.Compare(listviewX.SubItems[sortColumn].Text,listviewY.SubItems[sortColumn].Text); //根据上面的比较结果,返回正确的比较结果
if(order==SortOrder.Ascending)
{
return compareResult;
}
else if (order == SortOrder.Descending)
{
return (-compareResult);
}
else
{
return ;
}
} }
}

在form1中和listview的ColumnClick事件中实现下面的代码。

 public partial class Form1 : Form
{
private ListViewColumnSorter lvwColumnSorter; public Form1()
{
InitializeComponent(); //若要自定义排序顺序,必须编写一个实现 IComparer 接口的类,并将 ListViewItemSorter 属性设置为该类的一个对象。
//当设置 ListViewItemSorter 属性值时,将自动调用 Sort 方法。 lvwColumnSorter = new ListViewColumnSorter(); //new一个listview的排序类的对象
this.listView1.ListViewItemSorter = lvwColumnSorter; //设置ListView1的排序列 this.listView1.View = View.Details; this.listView1.Columns.Add(new ColumnHeader());
this.listView1.Columns[].Text = "Name";
this.listView1.Columns[].Width=; this.listView1.Columns.Add(new ColumnHeader());
this.listView1.Columns[].Text = "Path";
this.listView1.Columns[].Width = ; this.listView1.Columns.Add(new ColumnHeader());
this.listView1.Columns[].Text = "Type";
this.listView1.Columns[].Width = ; } 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; } this.listView1.Sort(); } }

点击listview 的列头对其item进行自动排序的更多相关文章

  1. C# listview 单击列头实现排序 <二>

    单击列头实现排序,首先在羡慕中添加下面的帮助实现的类:具体的代码: using System; using System.Collections; using System.Windows.Forms ...

  2. DataGridView使用技巧十三:点击列头实现升序和降序排序

    DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. Da ...

  3. [WPF]ListView点击列头排序功能实现

    [转]   [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...

  4. MFC listcontrol 分列 添加行数据 点击列头排序

    适用于 对话框程序 1.在工具箱中拖出 ListControl,然后右键-属性,view-Report 让你的ListControl变成这幅模样! 2.添加ListControl控件的control类 ...

  5. C++ 简单实现MFC ListControl 点击列头排序

    说明: SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID ...

  6. jqgrid 点击列头的超链接或按钮时,不触发列排序事件

    接上篇文章:jqgrid 将列头设置为超链接或按钮 如果在列头设置了超链接或按钮,在点击超链接或按钮时会触发列的排序事件. 原由:点击超链接/按钮会触发排序的冒泡事件 解决方法:点击超链接/按钮时,阻 ...

  7. 在ListView的GroupItem头中显示每列的Summary

    问题描述 WPF自带的ListView和DataGrid控,都提供了数据分组的支持,并可以对分组的Header进行自定义.但是,如果想在每个分组的Header中,显示出本分组的"小计&quo ...

  8. 实现在easyui中的datagrid,点击某一列的列头弹出combobox下拉框

    easyUI  datagrid在列头加下拉框,实现对列内容的筛选. 代码: onLoadSuccess: function (data) {//Fires when data is loaded s ...

  9. Winform DataGridView添加列头checkbox

    using System; using System.Data; using System.Drawing; using System.Windows.Forms; using Yanwen.Logi ...

随机推荐

  1. SVN eclipse插件错误

    部分文章转载自:http://www.bkjia.com/ASPjc/1015687.html 出现如下问题该怎么做: 1.在Windows--Preferences--Team--SVN--接口换成 ...

  2. bootstrap-table对前台页面表格的支持

    1.bootstrap-table是在bootstrap的基础上面做了一些封装,所以在使用bootstrap-table之前要导入的js和css有 1)基本的还是jQuery <script t ...

  3. Linux下Join命令

    Linux下Join命令 最近新上线算法,打算分析起点书籍点击率的波动,原来已经有流程每天每本书籍的点击率数据(文件).之前这种情况都是写代码对不同天的进行合并,后来发现linux下直接就有join命 ...

  4. MVC - HtmlHelper类

    传统的Html元素不能和服务端数据进行绑定 HtmlHelper类提供了一系列的方法来生成Html元素 并可以实现与数据绑定在一起 然后生成Html Html.BeginForm(actionName ...

  5. android 程序打开第三方程序

    因为在开发过程中需要开启扫描第三方程序,并且点击启动的效果,所以对这个功能进行了实现,并且分享出来个大家. 之前看到网上说需要获取包名和类名,然后通过  intent 才能打开这个程序,其实不必要这样 ...

  6. 第一个html程序

    <html><head><title> 表单</title> </head><body><form action=&quo ...

  7. <a>制作按钮

  8. PHP正值表达式

    一个正值表达式是有四部分组成分别是 1.定界符 //是最常用的定界符 其实除了数组字母下划线以外其他的什么都可以作为定界符 2.原子:最小的一个匹配单位 放在定界符中  在一个正值表达式中至少要有一个 ...

  9. Android学习之Intent传递数据

    Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...

  10. 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现

    转载请注明 ☞ http://blog.csdn.net/leverage_1229 上周为360全景项目引入了图片缓存模块.因为是在Android4.0平台以上运作,出于惯性,都会在设计之前查阅相关 ...