リストビューで行を挿入するには?


ももこ  2005-07-25 21:53:50  No: 58453

リストビューで表のなかほどに行を挿入しようと思っています。
どうしてもわかりません、
お教え願います。
MFC  VC6  XPです。


Blue  2005-07-25 21:59:43  No: 58454

GetListCtrlで取得したCListCtrlのInsertItemメソッドじゃできないですか?


momoko  2005-07-25 22:33:42  No: 58455

Blueさんありがとうございます
どうもうまくいきません
表の中の任意の位置に挿入しようとするわけですが
一番下につけ加えられるだけです
よろしくお願いします


Blue  2005-07-25 22:40:47  No: 58456

> どうもうまくいきません
うまくいかないソースを貼り付けてくれますか?


もも  2005-07-26 00:58:32  No: 58457

Blueさんこんな感じです
void CTabTestView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
  CTabTestDoc *pDoc = GetDocument();
  ASSERT( pDoc != NULL);

  m_lv.DeleteAllItems();

  int nTotal = 0;
    int nTotal2 = 0;
  int nTotal3 = 0;
  int nPage = GetTabCtrl().GetCurSel();
  const CASHLIST& cl = pDoc->GetCashList();
  CString cs;
  POSITION pos = cl.GetHeadPosition();
  int nIdx = 0;
  while( pos != NULL){
    POSITION posCur = pos;
    const CASHITEM& ci = cl.GetNext( pos);
    int nCat = ci.nCategory;
    if( nPage == 0 || nCat == nPage){
            
      cs.Format( _T("%u\t"), ci.uDate);//uDate
      m_lv.InsertItem( nIdx, cs);
            m_lv.SetItemText( nIdx, 1, ci.EditNumber1);
      m_lv.SetItemText( nIdx, 2, ci.csName);
      switch( nCat){
          case 1:
        cs = _T("会議費");
        break;
          case 2:
        cs= _T("事業費");
              break;
          case 3:
        cs = _T("元朝祭費");
        break;
          case 4:
        cs = _T("負担金");
        break;
                case 5:
        cs = _T("区立替金");
        break;
        case 6:
        cs =_T("備品費");
        break;
        case 7:
        cs = _T("水道光熱費");
        break;
        case 8:
        cs = _T("助成費");
        break;
        case 9:
        cs = _T("慶弔費");
        break;
        case 10:
        cs = _T("徴収費");
        break;
              case 11:
              cs =_T("事務用消耗品費");
              break;
              case 12:
              cs =_T("役員手当");
              break;        
        case 13:
              cs =_T("引継ぎ費");
              break;            
        case 14:
              cs =_T("雑費");
              break;          
        case 15:
              cs =_T("賃借料");
              break;
        case 16:
              cs =_T("繰出し金");
              break;
           case 17:
              cs =_T("入金");
              break;  
          case 18:
              cs =_T("繰越金");
              break;  
        case 19:
              cs =_T("区費");
              break;  
        case 20:
              cs =_T("志納金");
              break;  
        case 21:
              cs =_T("地代");
              break;  
           case 22:
              cs =_T("雑収入");
              break;
           case 23:
              cs =_T("     ");
              break;  
      }

      m_lv.SetItemText( nIdx, 3, cs);

      if( nCat == 1){
        nTotal += ci.nPrice;
               nTotal2 += ci.Su;
        nTotal3 += ci.Su2;

      }
      else{
        nTotal += ci.nPrice;//-
               nTotal2 += ci.Su;//-
        nTotal3 += ci.Su2;

      }
      cs.Format( _T("%d"), ci.nPrice);
      m_lv.SetItemText( nIdx, 4, cs);
            cs.Format( _T("%d"), ci.Su);
      m_lv.SetItemText( nIdx, 5, cs);
            cs.Format( _T("%d"), ci.Su2);
      m_lv.SetItemText( nIdx, 6, cs);
      m_lv.SetItemData( nIdx, (DWORD)posCur);
      nIdx++;
    }
  }
  
  // 空行の挿入
  m_lv.InsertItem( nIdx, _T("") );
  m_lv.SetItemData( nIdx, (DWORD)NULL);

  // 合計欄の挿入
  nIdx++;
  m_lv.InsertItem( nIdx, _T("合計") );
/////////////////////////////////////////////////////////////////////////////////

  cs.Format( _T("%d"), nTotal);
  m_lv.SetItemText( nIdx, 4, cs);
    cs.Format( _T("%d"), nTotal2);
  m_lv.SetItemText( nIdx, 5, cs);
    nTotal3=nTotal-nTotal2;  
    cs.Format( _T("%d"), nTotal3);
  m_lv.SetItemText( nIdx, 6, cs);
  m_lv.SetItemData( nIdx, (DWORD)NULL);
}


みい  2005-07-26 02:48:21  No: 58458

nIdxで挿入行決めてますよね。
nIdxをインクリメントし続けているからnIdxは常に最終行になりますよ。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加