点击listview 的列头对其item进行自动排序
若要自定义排序顺序,必须编写一个实现 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进行自动排序的更多相关文章
- C# listview 单击列头实现排序 <二>
单击列头实现排序,首先在羡慕中添加下面的帮助实现的类:具体的代码: using System; using System.Collections; using System.Windows.Forms ...
- DataGridView使用技巧十三:点击列头实现升序和降序排序
DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. Da ...
- [WPF]ListView点击列头排序功能实现
[转] [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...
- MFC listcontrol 分列 添加行数据 点击列头排序
适用于 对话框程序 1.在工具箱中拖出 ListControl,然后右键-属性,view-Report 让你的ListControl变成这幅模样! 2.添加ListControl控件的control类 ...
- C++ 简单实现MFC ListControl 点击列头排序
说明: SetItemData可以为每一行绑定一个DWORD类型的变量.用GetItemData可以获得这个变量.举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID ...
- jqgrid 点击列头的超链接或按钮时,不触发列排序事件
接上篇文章:jqgrid 将列头设置为超链接或按钮 如果在列头设置了超链接或按钮,在点击超链接或按钮时会触发列的排序事件. 原由:点击超链接/按钮会触发排序的冒泡事件 解决方法:点击超链接/按钮时,阻 ...
- 在ListView的GroupItem头中显示每列的Summary
问题描述 WPF自带的ListView和DataGrid控,都提供了数据分组的支持,并可以对分组的Header进行自定义.但是,如果想在每个分组的Header中,显示出本分组的"小计&quo ...
- 实现在easyui中的datagrid,点击某一列的列头弹出combobox下拉框
easyUI datagrid在列头加下拉框,实现对列内容的筛选. 代码: onLoadSuccess: function (data) {//Fires when data is loaded s ...
- Winform DataGridView添加列头checkbox
using System; using System.Data; using System.Drawing; using System.Windows.Forms; using Yanwen.Logi ...
随机推荐
- struts2设置<s:select>默认选中项的方法
struts2的select标签中,常用的有以下几个属性:(1)struts2中的select 标签中,必须设置的属性只有一个,即是list.(2)select标签的list中必须有值,不然会报错.如 ...
- Cocos2d-x 3.0- 在Visual Studio 2012中执行測试项目
Cocos2d-x - 怎样在Win32执行cpp-tests 2014年4月30日 星期三 小雨 微凉 稍显疲惫 注:本篇文章来自Cocos2d-x官网,小巫仅仅是粗略翻译眼下最新版本号的,教大家怎 ...
- [Javascript] Ex: concatAll, map and filter
concatAll: Array.prototype.concatAll = function() { var results = []; this.forEach(function(subArray ...
- IAP升级功能编写初期的一些困惑与疑问---完毕功能后的总结
IAP的源代码等资料我上传了,压缩包内有12个文件,,http://download.csdn.net/detail/f907279313/7524849(要积分的辛苦收集的你们就给点积分吧) 还有还 ...
- 多线程读写共享变量时,synchronized与volatile的作用
在<effective java>中看的的知识点,在工作中确实遇到了~ keywordsynchronized能够保证在同一时刻,仅仅有一个线程能够运行某一个方法,或者某一个代码块. 同步 ...
- Java 向Hbase表插入数据报(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac)
org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac 代码: //1.create HTa ...
- mydumper工作原理, seconds_behind_master的陷阱和pt-heartbeat (102)
http://blog.itpub.net/15480802/cid-84815-list-1/
- java窗体与Flash交互
最近在研究flash,用flash去读取文件很简单,但是存储文件就很麻烦了. 因此想到用java的窗体进行交互. 下面是DJNativeSwing-SWT-1-0-3-20140708的下载链接: h ...
- C#汉字转拼音首字母
输入汉字,提取其首字母: /// <summary> /// 汉字转拼音缩写 /// Code By /// 2004-11-30 /// </summary> /// < ...
- PAT L1-009. N个数求和
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...