说明:

SetItemData可以为每一行绑定一个DWORD类型的变量。用GetItemData可以获得这个变量。
举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID,一般这个ID值本身没有什么意义,用户也不需要看,因此在CListCtrl的可见列中,你不需要显示。但往往做具体查询等操作时,你又需要用这个ID来完成。这时,用SetItemData将其绑定到每一行,将非常方便,用户操作哪一行,则用GetItemData可以得到对应记录的ID,直接用来做操作,很爽。
由于绑定的是DWORD类型,因此还有一个扩展作用是绑定一个指针对象。比如这里我不再是一个ID主键了,而是需要关联一个数据结构,那么就可以把该数据结构对象的指针进行SetItemData绑定。这么做,可以省去再到一堆的数据结构数组中去查找的过程。

第一步:

定义全局变量:

int sort_column; // 记录点击的列

bool method; // 记录比较方法

第二步:

添加比较函数

// 比较函数
2staticint CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// 从参数中提取所需比较lc的两行数据
int row1 = (int) lParam1;
int row2 = (int) lParam2;
CListCtrl* lc = (CListCtrl*)lParamSort;
CString lp1 = lc->GetItemText(row1,sort_column);
CString lp2 = lc->GetItemText(row2,sort_column);
// 比较,对不同的列,不同比较,注意记录前一次排序方向,下一次要相反排序
if (sort_column<)
{ // int型比较
if (method)
return atoi(lp1)-atoi(lp2);
else
return atoi(lp1)-atoi(lp1);
}
else
{ // 文字型比较
if (method)
return lp1.CompareNoCase(lp2);
else
return lp2.CompareNoCase(lp1);
} return0;
}

第三步:添加列头点击事件  Lvn_Columnclick

void ClistDlg::OnLvnColumnclickxxx(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
sort_column = pNMLV->iSubItem;//点击的列
int count = m_list_port.GetItemCount();
for (int i=;i<count;i++)
  m_list_port.SetItemData(i,i); // 每行的比较关键字,此处为列序号(点击的列号),可以设置为其他 比较函数的第一二个参数
m_list_port.SortItems(MyCompareProc,(DWORD_PTR)&m_list_port);//排序 第二个参数是比较函数的第三个参数
*pResult =;
}

完成。

method是用来控制顺序逆序的,看个人情况设置。

C++ 简单实现MFC ListControl 点击列头排序的更多相关文章

  1. MFC CListControl 点击列头排序的实现

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

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

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

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

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

  4. DataWindow.NET 控件 实现点击列头排序

    1.定义字段                         Boolean ib_SetSort = true;                string is_SortType = " ...

  5. datagridview 点击列标题排序

    开发winform中,平时经常用到数据列表,我们大多选用datagridview,但是此控件本身没有排序的功能.参阅网上资料.留下标记,以后备用. datagridview的数据显示一般是通过数据绑定 ...

  6. easyui datagrid 点击列表头排序出现错乱的原因

    之前我的导师,也就是带我的同事,使用datagrid,发现点击列表头排序出现乱序,按理说只有顺序和逆序两种排序结果.因为他比较忙,当时没解决,把排序禁掉了,后来又要求一定要排序,所以他交给我. 一开始 ...

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

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

  8. WPF中的DataGridTemplateColumn实现点击列标题排序

    在DataGrid中使用模板列时,默认功能中对点击列标题是不对列值进行排序的,要排序就需要添加以下两个属性: 1.CanUserSort="True" 2.SortMemberPa ...

  9. winform dataGridView 点击列标题排序

    winform手动绑定数据后,点击列标题不能实现自动排序,苦苦寻找方法,发现下面的是可行的. //建立DataTable将当前dataGridView中的数据读进DataTable中 public D ...

随机推荐

  1. TP微信扫码支付

    1.官网下载php扫码支付adk,放在项目引入第三方类库中 2.配置config中相关参数 注意:可能会遇到问题 微信支付错误问题的解决:curl出错,错误码:60 Fatal error: Unca ...

  2. Hive快捷查询:不启用Mapreduce job启用Fetch task

    启用MapReduce Job是会消耗系统开销的.对于这个问题,从Hive0.10.0版本开始,对于简单的不需要聚合的类似SELECT <col> from <table> L ...

  3. Spring MVC与注解相关的一些配置的方法

    在spring mvc中,注解是需要通过配置文件去开启的,一般简单的项目可分为两个配置文件,这里姑且叫做spring-mvc.xml与spring-context.xml.其中spring-mvc.x ...

  4. 了解Katalon的安装及基本使用(for mac)

    一.整体了解: 2018 top 6的自动化测试工具(网上了解): 1. Selenium 2. Katalon Studio 3. UFT 4. Watir 5. IBM Rational Func ...

  5. django之models模块使用

    定义模型 将数据库表定义成类,集成models.Model from django.db import models # Create your models here. class Author(m ...

  6. spring事务传播实现源码分析

    转载. https://blog.csdn.net/qpfjalzm123/article/details/83717367 本文只是对spring事务传播实现的流程进行简单的分析,如有不对之处请指出 ...

  7. gentoo raid1

    参考 gentoo wiki,和其他网页,实现两个硬盘组成 raid1. 两个硬盘一个是 sdc,一个是 sdd,都是 4T容量. 首先内核开启 Autodetect RAID arrays duri ...

  8. redis下操作Set和Zset

    redis操作set 无序集合 元素为string类型 元素具有唯一性,不重复 命令 设置 添加元素 SADD key member [member ...]  获取 返回key集合所有的元素 SME ...

  9. FasDfs缩略图解决方案 -- Linux

    前面研究了fastdfs的安装部署,并且做了多机同步. 这次我们解决下FastDFS做文件服务器并处理缩略图的问题. 有两个方案,方案1,在上传过程中生成多张图片,服务器存备.方案2,只上传一张图片, ...

  10. 58.纯 CSS 创作一只卡通鹦鹉

    原文地址:https://segmentfault.com/a/1190000015339977 优化后效果地址:https://scrimba.com/c/c97Z2vuD 感想:消除了图片外的:h ...