点击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 ...
随机推荐
- 电脑无法识别U盘(usb类外接设备)的解决办法
首先分析USB无法识别的硬件原因: 1.BIOS禁用了USB设备.(进入BIOS,将"Enable USB Device"修改为"Enable") 2.USB接 ...
- linux中配置maven环境
一 . 下载maven http://maven.apache.org/download.cgi 二. 将maven解压到你的工具文件夹下 如我是解压到: /home/urc/tool下 三. ...
- 如何去掉WinForm或者WPF的最大化和最小化按钮
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何去掉WinForm或者WPF的最大化和最小化按钮.
- 安装J2EE的SDK报错:could not find the required version of the Java(TM)2 Runtime Environment in '(null)'的解决办法。
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- js split str.split(" "); split使用方法 在某处截字符串
<script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串var strs= new ...
- Struts2学习笔记1
一.下载struts2.0.1 http://struts.apache.org/downloads.html,下载struts-2.0.1-all.zip,这个压缩包中包括了开发struts2所需 ...
- java中Map等对象转换为json
ObjectMapper objectMapper = new ObjectMapper(); String jsonString = objectMapper.writeValueAsString( ...
- SpringMVC——项目启动时从数据库查询数据
SpringMVC项目中遇到这样的问题: 1.很多数据字典需要从数据库中查询: 2.懒得修改SQL语句: 3.想在项目中声明静态变量存储数据字典,但是希望这个字典可以在项目启动时进行加载. 当遇到这样 ...
- java class 文件解析
参考下面两个文章对一个class文件进行解析: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.6 htt ...
- 一句话、一张图记住Activity和Fragment之间错综复杂的生命周期关系
如果我们在Fragment和它的宿主Activity的生命周期中都加上Log日志,你能顺利写出他们的执行顺序吗?我们先来看一张Google官方的图片: 咋一听,Activity生命周期有七个方法,Fr ...