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

MFC CLISTCRL更新任何单元格的文本,mfc,clistctrl,Mfc,Clistctrl,这个问题是为了理解如何以编程方式更新任何行。 细节。 我有一个listcrtl,它接受来自文件或对话框中编辑控件的数据。当添加项目时,我将知道其位置,即我添加的位置,因此我可以更改其子项目文本。我甚至在列表中实现了排序功能,所以现在位置不断变化。我为每一行都有一个标识符列,以便识别该行。 现在,从一个外部事件开始,如果我必须更改我知道的ID的其他列值,我必须首先通过比较ID列找到项的位置,然后使用该位置设置子项文本 这很好,只是先找到行需要时间,然后需要更新列 现在,为了直接获取行,我需要一些帮

这个问题是为了理解如何以编程方式更新任何行。 细节。 我有一个listcrtl,它接受来自文件或对话框中编辑控件的数据。当添加项目时,我将知道其位置,即我添加的位置,因此我可以更改其子项目文本。我甚至在列表中实现了排序功能,所以现在位置不断变化。我为每一行都有一个标识符列,以便识别该行。 现在,从一个外部事件开始,如果我必须更改我知道的ID的其他列值,我必须首先通过比较ID列找到项的位置,然后使用该位置设置子项文本

这很好,只是先找到行需要时间,然后需要更新列

现在,为了直接获取行,我需要一些帮助。 我经历过
但这不使用MFC。请帮助我实现这一点。

如果你有很多项目,你应该考虑切换到。这是访问数据的最快方式。如果您不想为此投入时间,那么最简单的方法是:

  • 填充CListCtrl时,使用SetItemData()方法将每个项目的ID存储在项目数据中。即使在重新排序之后,ID也将始终与项目关联
  • 当您需要定位所需项目时,只需扫描所有项目,但不要使用GetItemText()。改为使用GetItemData()。这会更快

  • 直到现在,我并没有很多项目,所以我不得不使用虚拟列表。所以,我只是想知道,是否有办法跟踪这些项,比如保持指向每个列表项的指针的映射,这样,即使位置改变,指针仍然可以被访问以获取该项。但这显示出一些局限性。另一种方法是为所有这些ID保留一个映射,并在排序时重新填充映射。看起来那个在工作。但是,如果我们有一个直接的列表项访问权限,这将非常有帮助。@Naresh:如果您需要通过指针直接访问您的项目,您应该使用一个虚拟列表框。尽管虚拟列表框的存在主要是出于性能原因,但性能并不是决定何时使用它们的唯一因素。