clistctrl 删除多行后,排序问题!!例如,我有一个列表信息显示如下,序号      人名      国籍     工作类型     工资
1          张三     中国       会计       20000
2          小王     美国       化工       5000
3          大伟     中国       服装       10000
4          Tom      英国       机械       7000
5          李四     日本       金融       8000使用了下面一段程序后,假如我删除了第3和第5序号的信息,那么结果会变成序号      人名      国籍     工作类型     工资
1          张三     中国       会计       20000
2          小王     美国       化工       5000
4          Tom      英国       机械       7000
我现在要变成
序号      人名      国籍     工作类型     工资
1          张三     中国       会计       20000
2          小王     美国       化工       5000
3          Tom      英国       机械       7000
请注意顺序,不能是这样哦,一定要按照先后顺序排列。序号      人名      国籍     工作类型     工资
1          小王     美国       化工       5000
2          Tom      英国       机械       7000
3          张三     中国       会计       20000
或这样,都不行
序号      人名      国籍     工作类型     工资
1          小王     美国       化工       5000
2          张三     中国       会计       20000
3          Tom      英国       机械       7000我使用的程序是这样的,那么我该怎么实现才可以达到我的要求呢,请高手指点。POSITION pos = m_List.GetFirstSelectedItemPosition();  
if (pos == NULL)  
{  
    MessageBox(_T("请选择要删除的项!"), _T("提示"), MB_OK|MB_ICONINFORMATION);  
    return ;  
}  
  
while (pos)  
{  
    int iIndex  = m_List.GetNextSelectedItem(pos);  
    m_List.DeleteItem(iIndex); 
    pos = m_List.GetFirstSelectedItemPosition();  
}  

解决方案 »

  1.   

    那么结果会变成序号 人名 国籍 工作类型 工资
    1 张三 中国 会计 20000
    2 小王 美国 化工 5000
    4 Tom 英国 机械 7000
    我现在要变成
    序号 人名 国籍 工作类型 工资
    1 张三 中国 会计 20000
    2 小王 美国 化工 5000
    3 Tom 英国 机械 7000
    你要变成的,怎么与原来的一样?
    你排序的原则是什么?
      

  2.   

    CListCtrl::SetItemText(...);删除后修改序号文本
      

  3.   

    如果数据量不是很大,删除后更新一遍数据如果数据量很大,设置list 所有者数据为真,处理 LVN_GETDISPINFO 
      

  4.   

    把ListCtrl每行的数据作为一个结构体对象读取到内存中的一个链表,然后删除对应的,你再删除ListCtrl所有数据,然后重新插入.
      

  5.   

    添加一个函数每次删除之后ResetIndex()void ResetIndex()
    {
         for(int i=0;i<itemCount;i++)
       //修改item 0列的值为i
    }
    具体代码应该很容易了吧
      

  6.   

    CListCtrl::SetItemText(...);删除后修改序号文本
      

  7.   

    int nItem,nLine;
    CString strNo;
    //中间是删除代码省掉了
    ....
    nItem =m_List.GetItemCount();
    for (nLine = 0; nLine < nItem; nLine++ )
    {
        strNo.Format("%d",nLine+1);
        m_List.SetItemText(nLine,0,strNo);
    }
      

  8.   

    这个不是很简单你删除后弄个for循环,然后一行一行的重新编号。不就解决了?
      

  9.   

    CListCtrl::SetItemText(...);删除后修改序号文本, 修改Index值就可以了!
      

  10.   

    把这段加在你的删除程序后面 CString nb;
    for(int i=0;i<m_List.GetItemCount();i++)
    {
    nb.Format(_T("%d"),i);
    m_List.SetItemText(i,0,nb);
    }