[置顶] 对ListCtrl列表控件按列进行排序
2017-09-23 19:47
549 查看
新建一个对话框工程,拖一个列表控件,ID是IDC_LIST,属性是Report报表模式。
在对话框的初始化函数OnInitDialog()中对列表框进行初始化,初始化为一个具有三列的列表框,分别为:编号、姓名、国家。
然后在拖三个按钮。第一个按钮控制按列表控件的第一列进行循环排序;第二个按钮控制按列表控件的第二列名字的汉语拼音由大向小排列,第三个按钮控制按列表控件的第三列国家的ASCII码值由小到大进行排列。
为列表控件绑定一个变量m_List,定义一个BOOL型变量bFlag控制按第一列循环排序,在定义三个排序函数:
bFlag进行初始化:
在cpp文件中,首先初始化列表控件,具有三列:
按钮响应函数和排序函数:
以按姓名排列为例,如图:
在对话框的初始化函数OnInitDialog()中对列表框进行初始化,初始化为一个具有三列的列表框,分别为:编号、姓名、国家。
然后在拖三个按钮。第一个按钮控制按列表控件的第一列进行循环排序;第二个按钮控制按列表控件的第二列名字的汉语拼音由大向小排列,第三个按钮控制按列表控件的第三列国家的ASCII码值由小到大进行排列。
为列表控件绑定一个变量m_List,定义一个BOOL型变量bFlag控制按第一列循环排序,在定义三个排序函数:
public: CListCtrl m_List; static BOOL bFlag; int static CALLBACK CompareByNum(LPARAM lP1, LPARAM lP2, LPARAM lP); int static CALLBACK CompareByName(LPARAM lP1, LPARAM lP2, LPARAM lP); int static CALLBACK CompareByNation(LPARAM lP1, LPARAM lP2, LPARAM lP);
bFlag进行初始化:
BOOL CListSortDlg::bFlag = TRUE;
在cpp文件中,首先初始化列表控件,具有三列:
BOOL CListSortDlg::OnInitDialog() { CDialogEx::OnInitDialog(); //............ m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_List.InsertColumn(0,"编号",LVCFMT_CENTER,180,-1);//插入三个标头 m_List.InsertColumn(1,"姓名",LVCFMT_CENTER,180,-1); m_List.InsertColumn(2,"国籍",LVCFMT_CENTER,180,-1); int nCount = m_List.GetItemCount();//插入第一行 m_List.InsertItem(nCount,"1001"); m_List.SetItemText(nCount,1,"李四"); m_List.SetItemText(nCount,2,"China"); nCount = m_List.GetItemCount();//插入第二行 m_List.InsertItem(nCount,"1004"); m_List.SetItemText(nCount,1,"王五"); m_List.SetItemText(nCount,2,"Japan"); nCount = m_List.GetItemCount();//插入第三行 m_List.InsertItem(nCount,"1003"); m_List.SetItemText(nCount,1,"张三"); m_List.SetItemText(nCount,2,"Usa"); nCount = m_List.GetItemCount();//插入第四行 m_List.InsertItem(nCount,"1005"); m_List.SetItemText(nCount,1,"张婷"); m_List.SetItemText(nCount,2,"Uk"); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
按钮响应函数和排序函数:
int CALLBACK CListSortDlg::CompareByNum(LPARAM lP1, LPARAM lP2, LPARAM lP) { CListSortDlg* pThis = (CListSortDlg*)lP; //分别获取参与排序的两个行的编号 int nNum1 = atoi(pThis->m_List.GetItemText(lP1,0)); int nNum2 = atoi(pThis->m_List.GetItemText(lP2,0)); //返回值:如果为真交换两个行的数据,如果为假两个行不进行交换 //bFlag控制按编号进行循环排列,大->小、小->大、大->小、小->大......等等循环。 if(bFlag) return nNum1 > nNum2; else return nNum2 > nNum1; } int CALLBACK CListSortDlg::CompareByName(LPARAM lP1, LPARAM lP2, LPARAM lP) { CListSortDlg* pThis = (CListSortDlg*)lP; //分别获取参与排序的两个行的姓名 CString str1 = pThis->m_List.GetItemText(lP1,1); CString str2 = pThis->m_List.GetItemText(lP2,1); //返回值:如果为真交换两个行的数据,如果为假两个行不进行交换 return str1 < str2;//按照名字的汉语拼音,由大向小排列 } int CALLBACK CListSortDlg::CompareByNation(LPARAM lP1, LPARAM lP2, LPARAM lP) { CListSortDlg* pThis = (CListSortDlg*)lP; //分别获取参与排序的两个行的国家 CString str1 = pThis->m_List.GetItemText(lP1,2); CString str2 = pThis->m_List.GetItemText(lP2,2); //返回值:如果为真交换两个行的数据,如果为假两个行不进行交换 return str1 > str2;//按照国家的ASCII码值进行排列,由小到大 } void CListSortDlg::OnBnClickedBtn1()//按编号排序 { bFlag = !bFlag; int nCount = m_List.GetItemCount()-1; while (nCount > -1)//为每一行绑定一个值,将来这个值会传递给排序函数的参数lp1和lp2 { m_List.SetItemData(nCount,nCount); nCount--; } m_List.SortItems(CompareByNum,(DWORD_PTR)this); } void CListSortDlg::OnBnClickedBtn2()//按姓名排序 { bFlag = !bFlag; int nCount = m_List.GetItemCount()-1; while (nCount > -1)//为每一行绑定一个值,将来这个值会传递给排序函数的参数lp1和lp2 { m_List.SetItemData(nCount,nCount); nCount--; } m_List.SortItems(CompareByName,(DWORD_PTR)this); } void CListSortDlg::OnBnClickedBtn3()//按国籍排序 { bFlag = !bFlag; int nCount = m_List.GetItemCount()-1; while (nCount > -1)//为每一行绑定一个值,将来这个值会传递给排序函数的参数lp1和lp2 { m_List.SetItemData(nCount,nCount); nCount--; } m_List.SortItems(CompareByNation,(DWORD_PTR)this); }
以按姓名排列为例,如图:
相关文章推荐
- C#:ListView控件如何实现点击列表头进行排序
- C#:ListView控件如何实现点击列表头进行排序
- C#:ListView控件如何实现点击列表头进行排序?
- DataGridView控件点击表列头进行多列关联排序
- 获取DataGridView绑定BindingSource的数据表,并根据树控件点击进行筛选数据表,下拉控件自定义排序问题初步解决方法,解决了该行属于另一个表的错误提示.
- 关于列表(ListCtrl)控件的界面基础知识
- 移动端列表长按后上下拖动进行排序
- 如何利用外部列表元素顺序对源列表进行排序
- 如何:对 DataGridView 控件中的数据进行排序
- MFC-ListCtrl(列表控件)
- ListCtrl—具有文本录入功能的列表视图控件
- 【Python-2.7】对列表进行排序
- C#对list列表进行随机排序的方法
- 在ListCtrl中进行排序(二)
- 对泛型列表进行排序和搜索
- JavaScript实现对下拉列表值进行排序的方法
- [置顶] html中对hidden状态input控件进行赋值,而赋的值中包含标签,例如"<img~~~>",这样的话>就会导致input控件被截断!
- MFC中ListCtrl列表控件的使用
- 使用插入排序算法对列表进行排序——Leetcode系列(五)
- PowerShell 中进行列表展示的排序-倒序