Copying/Moving Rows in CListCtrl
Posted
by James Spibey
on June 19th, 1999
I had the need in one of my projects to allow the user to rearrange the order of the ListCtrl but I didn't want to allow them to drag and drop. Therefore I came up with this.
BOOL CListCtrlEx::MoveRow(int from, int to)
{
//Can't move to the same place, or from or to a negative index
if(from == to || from < 0 || to < 0)
return FALSE;
//First Copy the row to the new location
if(CopyRow(from, to))
{
//If we have just inserted a row before
//this one in the list, we need to increment
//our index.
if(from > to)
DeleteItem(from + 1);
else
DeleteItem(from);
return TRUE;
}
else
return FALSE;
}
BOOL CListCtrlEx::CopyRow(int from, int to)
{
//Can't move to the same place, or from or to a negative index
if(from == to || from < 0 || to < 0)
return FALSE;
//Copy the row to the new index
InsertItem(to, GetItemText(from, 0));
//If row has been inserted before original
//increment the original
if(from > to)
from++;
//Loop through subitems
for(int i = 1; i < GetColumnCount(); i++)
{
SetItemText(to, i, GetItemText(from, i));
}
return TRUE;
}
Remember that if you want to move a row one row upwards in the list you can use:
m_List.MoveRow(index, index - 1);
But to move it one row down you need:
m_List.MoveRow(index, index + 2);
This is because if you just enter 'index + 1' as the destination, the new row is inserted immeadiately after the current one. The current one is then deleted so you end up in the same place!
Ahh... Trial and Error is a wonderful thing.

Comments
More to item than text and state
Posted by magnesium on 03/31/2006 04:52amKeep in mind though that there's more to an item than text and state. The item data (lParam) for example, is a very important member in most cases and should not be forgotten. To avoid forgetting anything important, you may want to use GetItem() and SetItem() instead, modify LVITEM structure to ignore the iItem member, or change accordingly.
ReplyNice
Posted by Legacy on 01/29/2004 12:00amOriginally posted by: Jibesh
ReplyA wonderful thing
Posted by Legacy on 09/14/1999 12:00amOriginally posted by: Julia Child
I didn't know that Martha Stewart is a programmer.
Reply