今天看到一程序,是在列表视图中插入数据,感觉奇怪的是在循环中,m_list.SetItemText的第一参数为什么始终是0,如果是0的话,那不就始终在第一行插入数据了吗?但最终结果是能够正常的插入多行数据。不明白,请各位高手们解释一下哦
while (!m_pRecordset->adoEOF) //记录集不为空时循环
{
m_List.InsertItem(0,""); //向列表视图控件中插入行
//向列表视图控件中插入列
m_List.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("Merchandise"));
m_List.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("Sum"));
m_pRecordset->MoveNext();//将记录集指针移动到下一条记录 }

解决方案 »

  1.   

    http://blog.csdn.net/lixiaosan/archive/2006/04/07/653563.aspx
    自己看看吧0_0也许有用
    因为是每次都插入了一行然后插入的数据0_0
      

  2.   

    m_List.InsertItem(0,""); //向列表视图控件中插入行
    //向列表视图控件中插入列
    m_List.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("Merchandise"));
    m_List.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("Sum"));
    ===============
    这个问题是这样的:
    你每次InsertItem的时候都是把新的条目插入到第0个位置。所以,新条目就会取代你上次第0个位置的条目。再看你SetItemText每次操作的对象也是第0个,但是,是的第0个。
    如此更替,你可以得到了如上的结果
      

  3.   

    CListCtrl::SetItemTextBOOL SetItemText(
       int nItem,
       int nSubItem,
       LPCTSTR lpszText 
    );
     Parameters
    nItem
    Index of the item whose text is to be set. nSubItem
    Index of the subitem, or zero to set the item label. lpszText
    Pointer to a string that contains the new item text. 
    始终新插入的数据在第一行,原来的数据依次往下移
      

  4.   

    只有第一行或者第一列的能插入,其余的都是SET
      

  5.   

    这个问题的出现应该是没有初始化列表视图的风格(LVS_ICON、LVS_SMALLICON、LVS_LIST、LVS_REPORT);这种情况下
    只有m_List.InsertItem(0,"")和m_list.SetItemText的第一参数为0时,才能正确插入数据。