现在有一个document/view结构(含crecordset和crecordview),个人财务软件,在主窗口放置了一个clistctrl控件。希望在打开界面时当点击“收入表”控件时能显示出一个六列的列表,并将数据库中的相关内容显示出来,应该把初始化代码放在哪里,最好能给出基本的初始化代码,谢谢! 
我自己放在OnInitialUpdate()里面,
代码如下:{
    CINCOMESET m_incomeset;//插入列没有问题,可以正常显示各列标题
m_main.InsertColumn( 0, "date",   LVCFMT_LEFT, 100 );
         m_main.InsertColumn( 1, "name",   LVCFMT_LEFT, 100 );
m_main.InsertColumn( 2, "type",   LVCFMT_LEFT, 150 );
m_main.InsertColumn( 3, "money",  LVCFMT_LEFT, 100 );
m_main.InsertColumn( 4, "place",  LVCFMT_LEFT, 150 );
m_main.InsertColumn( 5, "way",    LVCFMT_LEFT, 200 );
m_main.InsertColumn( 6,"credit card number",LVCFMT_LEFT,200 );
m_main.InsertColumn( 7, "re",          LVCFMT_LEFT, 200 );

m_main.ModifyStyle( 0, LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL );
m_main.SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES
                     | LVS_EX_HEADERDRAGDROP );

//但是一旦数据库有信息后,想将其读出来,就会ASSERT,
try {
if ( m_incomeset.IsOpen() )
 m_incomeset.Close();

     m_incomeset.Open();
 m_incomeset.MoveFirst();

while( !m_incomeset.IsEOF() )
{     int nItem = m_main.InsertItem( 0, m_incomeset.m_income_date );

         m_main.SetItemText( nItem, 1, m_incomeset.m_income_name );
m_main.SetItemText( nItem, 2, m_incomeset.m_income_type );
m_main.SetItemText( nItem, 3, m_incomeset.m_income_money );
m_main.SetItemText( nItem, 4, m_incomeset.m_income_place );
m_main.SetItemText( nItem, 5, m_incomeset.m_income_way );
m_main.SetItemText( nItem, 6, m_incomeset.m_income_credit_card_number);
m_main.SetItemText( nItem, 7, m_incomeset.m_income_re);
m_incomeset.MoveNext();

}


m_incomeset.Close();
}

catch( ... )
{
MessageBox( " wrong ! " );
m_incomeset.Close();
MessageBox( " wrong ! " );
}
}希望大侠赐教,我调试俩天了,根本没结果,现在一点信心都没有了,多谢你的帮助啊

解决方案 »

  1.   

    while( !m_incomeset.IsEOF() )
    {     int nItem = m_main.InsertItem( 0, m_incomeset.m_income_date );

             m_main.SetItemText( nItem, 1, m_incomeset.m_income_name );
    m_main.SetItemText( nItem, 2, m_incomeset.m_income_type );
    m_main.SetItemText( nItem, 3, m_incomeset.m_income_money );
    m_main.SetItemText( nItem, 4, m_incomeset.m_income_place );
    m_main.SetItemText( nItem, 5, m_incomeset.m_income_way );
    m_main.SetItemText( nItem, 6, m_incomeset.m_income_credit_card_number);
    m_main.SetItemText( nItem, 7, m_incomeset.m_income_re);
    m_incomeset.MoveNext();

    }
      

  2.   

    一执行上面的代码就错,不是编译出错,而是已经执行了,在点击相关控件时候就出错ASSERT
      

  3.   

    跟数据读取没有关系,使控件属性设置的问题。
    我用的是没有派生的CListCtrl
    在资源中设置:view属性为Report
    在CShowDlg::OnInitDialog()写代码没有问题:
    m_lstConTab.InsertColumn(0, "序号",LVCFMT_LEFT,40);
    m_lstConTab.InsertColumn(1, "形状",LVCFMT_LEFT,45);
    m_lstConTab.InsertColumn(2, "边长比", LVCFMT_LEFT,80);
    m_lstConTab.InsertColumn(3, "相对含量", LVCFMT_LEFT,80);
    m_lstConTab.InsertColumn(4, "分类", LVCFMT_LEFT,80);
    m_lstConTab.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);//|LVS_EX_CHECKBOXES); int nCount = (int)m_saTriRule.GetCount();
    int nIndex = m_lstConTab.GetItemCount();
    for(int i=0;i<nCount;i++)
    {
    CString strXh;
    strXh.Format("%d",i+1);
    nIndex = m_lstConTab.InsertItem(nIndex,strXh); CString strText;
    strText = m_saTriRule.GetAt(i);
    CString strXz,strBcb,strC1,strJsjl;
    GetRuleItem(strText,strXz,strBcb,strC1,strJsjl); m_lstConTab.SetItemText(nIndex,1,strXz);
    m_lstConTab.SetItemText(nIndex,2,strBcb);
    m_lstConTab.SetItemText(nIndex,3,strC1);
    m_lstConTab.SetItemText(nIndex,4,strJsjl); nIndex = m_lstConTab.GetItemCount();
    }
      

  4.   

    我知道,但是我用的是VIEW类阿
    中间没有OnInitDialog()可以用啊,我是将ListCtrl放在主界面中
      

  5.   

    应该不是这个代码的问题,我这里重新做了一个工程,也没出什么错啊
    可能是你工程的问题,检查一下资源ID,把工程Rebuild All。
      

  6.   

    兄弟,问题还没解决,初始化这个控件很简单啊。
    跟踪一下,看看代码是哪一句出错。
    万一还是不行,你把VIEW及代码弄出来做一个简单的工程
    发到,我帮你调试一下看看。