我用的是CListCtrl report
结果,如果Item数大于10的时候,所有行的第一列全部显示,而标号大于10的其他行都不显示。呜呜呜呜~~~
源码如下:
         
         CString strText;
LV_COLUMN  lc;
lc.mask = LVCF_FMT | LVCF_WIDTH |
      LVCF_TEXT | LVCF_SUBITEM;
lc.fmt = LVCFMT_CENTER;
lc.cx = 75;
lc.iSubItem = 0; for(int i=0; i<2; i++)
{
strText.Format(TEXT("column %d"), i);
lc.pszText = strText.GetBuffer(strText.GetLength());
m_List1.InsertColumn(i, &lc);
}
m_List1.SetItemCount(20);        for (i=0;i < 20;i++)
       {
              strText.Format(TEXT("item %d"), i);              m_List1.InsertItem(
              LVIF_TEXT|LVIF_STATE, i, strText,
             (i%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED,
               0, 0);            for (int j=1;j < 2;j++)
           {
                  strText.Format(TEXT("sub-item %d %d"), i, j);
                  m_List1.SetItemText(i, j, strText);
           }
         }
m_List1.SetRedraw();
m_List1.Invalidate();
return;显示的结果如下:
column0     column1       
item0     sub-item 0 1 
item1     sub-item 1 1
item10
item12
item13
item14
item15
item16
item17
item18
item19
item2      sub-item 2 1
item3      sub-item 3 1
item4      sub-item 4 1
item5      sub-item 5 1
item6      sub-item 6 1
item7      sub-item 7 1
item8      sub-item 8 1
item9      sub-item 19 1

解决方案 »

  1.   


            for (i=0;i < 20;i++)
           {
                  strText.Format(TEXT("item %d"), i);              int nItem = m_List1.InsertItem( //这里增加一个变量nItem
                  LVIF_TEXT|LVIF_STATE, i, strText,
                 (i%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED,
                   0, 0);            for (int j=1;j < 2;j++)
               {
                      strText.Format(TEXT("sub-item %d %d"), i, j);
                      m_List1.SetItemText(nItem, j, strText); //用在这里
               }
             }因为你的listctrl是排序的,所以item10位置在item1后面而不在第10的位置上。