リストビューで表のなかほどに行を挿入しようと思っています。
どうしてもわかりません、
お教え願います。
MFC VC6 XPです。
GetListCtrlで取得したCListCtrlのInsertItemメソッドじゃできないですか?
Blueさんありがとうございます
どうもうまくいきません
表の中の任意の位置に挿入しようとするわけですが
一番下につけ加えられるだけです
よろしくお願いします
> どうもうまくいきません
うまくいかないソースを貼り付けてくれますか?
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);
}
nIdxで挿入行決めてますよね。
nIdxをインクリメントし続けているからnIdxは常に最終行になりますよ。
ツイート | ![]() |