2015-05-25 8 views
0

enter image description hereКак исправить строку и повторение столбца в CListCtrl

Как исправить строку и повторение столбца в CListCtrl в MFC.

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() перед освежением.


Update после комментария:

справа, так что подтверждает вы пополняете содержание слишком часто или в неправильном месте. DeleteAllItems() очистит содержимое, а не удалит заголовки столбцов.

Таким образом, либо (1) вызовите DeleteColumn() на каждый из уже вставленных столбцов, либо (2) предпочтительно выполните вставку столбцов в более подходящее место, где это произойдет только один раз. Скажем в диалоговом окне OnInitDialog(), на котором я предполагаю, что вы работаете.

+0

Использование функции row item не повторяется. Но для проблемы с столбцом это то же самое. – abhi312

3

CListCtrl не волнует, если ваш товар должен быть уникальным или нет. Поэтому вы должны справиться с этим сами.

Вам нужно создать и использовать std::map или даже std::set структуру для элементов, которые должны быть уникальными и сделать поиск по каждый раз, когда вам нужно вставить элемент или столбец:

Вставка:

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

Поиск:

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

Для этого вы также можете использовать контейнер MFC .