2015-05-25 42 views
0

enter image description here如何解决在CListCtrl中

行和列的重复如何在MFC修复的行和列的重复中的CListCtrl。

int nItem = 0; 
m_list.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100); 
m_list.InsertColumn(1, _T("Area km\262"), LVCFMT_RIGHT, 80); 
m_list.InsertColumn(2, _T("Population"), LVCFMT_RIGHT, 100); 
m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); 
ModifyStyle(0, LVS_REPORT); 

nItem = m_list.InsertItem(0, _T("Libya"), 8); 
m_list.SetItemText(nItem, 1, _T("1,759,540")); 
m_list.SetItemText(nItem, 2, _T("5,499,074")); 

nItem = m_list.InsertItem(0, _T("Senegal"), 7); 
m_list.SetItemText(nItem, 1, _T("196,190")); 
m_list.SetItemText(nItem, 2,_T("10,580,307")); 

nItem = m_list.InsertItem(0, _T("Cuba"), 6); 
m_list.SetItemText(nItem, 1, _T("110,860")); 
m_list.SetItemText(nItem, 2, _T("11,263,429")); 
+0

@Michael Walz谢谢... – abhi312

回答

2

是不是你没有清理清单之前刷新内容。它会重新添加行和列,而不是替换。刷新前请致电m_list.DeleteAllItems()。评论后


更新:

权,因此,确认您更新的内容过于频繁或者在错误的地方。 DeleteAllItems()将清除内容,不会删除已添加的列标题。因此,无论是(1)首先在每个已插入的列上调用DeleteColumn(),或者(2)最好将列插入到只会发生一次的更合适的位置。在我假定你正在使用的对话框的OnInitDialog()中说。

+0

通过使用函数行项不重复但是对于列问题是一样的。 – abhi312

3

CListCtrl不关心你的物品是否应该是唯一的。所以你必须自己处理。

您需要创建和使用std::map或物品应该是唯一的,甚至std::set结构,并在每次需要插入一个项目或一个栏的时间进行查找:

插入:

std::set<CString> listItems; 
listItems.insert(columnName); 

查找:

const bool is_in = listItems.find(element) != listItems.end(); 

你也可以使用CMap MFC容器来做到这一点。