默认 CListCtrl 数据即将排序

Posted

技术标签:

【中文标题】默认 CListCtrl 数据即将排序【英文标题】:Default CListCtrl data is coming sorted 【发布时间】:2013-11-13 06:45:19 【问题描述】:

我正在逐行读取文件中的数据,并将每一行的标记放入向量 tmpstrArr。然后在 CListCtrl 中为每一行添加标记,但 CListCtrl 以降序显示排序数据。我很困惑,因为在调试元素时正在按照与文件中可用的相同的正确顺序进行。我希望我的 CListCtrl 数据以文件中的原始形式而不是排序形式。我还检查了 CListCtrl 的属性窗口,其中选择了 sort=None。

LVITEM lvi;
CString strItem;

m_listctrl.InsertColumn(0, _T("col 1"), LVCFMT_LEFT, 100);
m_listctrl.InsertColumn(1, _T("col 2"), LVCFMT_LEFT, 100);

for(int i=0;i<tmpstrArr.size();i++)

    strItem=tmpstrArr.at(i).c_str();
    lvi.iItem = 0;
    lvi.iSubItem = i;
    lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
    //lvi.iImage = i%8;// There are 8 images in the image list
    if(i==0)
    
        lvi.mask =  LVIF_IMAGE | LVIF_TEXT;
        m_listctrl.InsertItem(&lvi);
    
    else
        m_listctrl.SetItem(&lvi);

【问题讨论】:

所以删除您在未显示的创建代码中设置的LVS_SORTASCENDING 样式位?或者至少向我们展示这段代码。 【参考方案1】:

您正在添加项目位置为 0 的每个项目。因此,您刚刚插入的最后一个项目始终是列表中的第一个。 见docs。

如果你想得到和数组中一样的顺序,你需要添加带有

的item
 lvi.iItem = m_listCtrl.GetItemCount();
 // or use INT_MAX (see docu)
 lvi.iItem = INT_MAX;

【讨论】:

以上是关于默认 CListCtrl 数据即将排序的主要内容,如果未能解决你的问题,请参考以下文章

mfc的ClistCtrl控件列的排序

ClistCtrl 中的选择和突出显示问题

ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)

MFC CListCtrl 更新任何单元格的文本

更改 CListCtrl 中的特定项目颜色?

在 MFC 中制定计划的最佳方法是啥