请大家看看我写的程序,并改正我的错误,让结果自动显示在列表(List Control控件)中,谢谢!void CPeopleDlg::RefreshData()
{
//读取记录
CString name,department,post,sex,birthdate,telephone,maticulate,sql;
sql="Select * from archform";
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
return;
int i=0;
while(!m_pRecordset->adoEOF)
{
name=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("name");
department=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("department");
post=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("post");
sex=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("sex");
birthdate=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("birthdate");
telephone=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("telephone");
maticulate=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("maticulate");


m_personnel.SetItemText(i,0,name);
m_personnel.SetItemText(i,1,department);
m_personnel.SetItemText(i,2,post);
m_personnel.SetItemText(i,3,sex);
m_personnel.SetItemText(i,4,birthdate);
m_personnel.SetItemText(i,5,telephone);
m_personnel.SetItemText(i,6,maticulate);
i++;
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
}
catch(_com_error e) //捕捉异常
{

}
}注解:m_personnel 是Ctrl Control,Ado可以关联,我登录进入主界面想显示数据库里的内容。

解决方案 »

  1.   

    free_card,您写的有错误,应该是:
         m_personnel.InsertItem(x,x);
      

  2.   

    应该先InsertItem(x,x,x);然后其他的用SetItemText(X,X,X);
      

  3.   

    jnxulei,能否说详细点,谢谢1
      

  4.   

    CDialog::OnInitDialog();
    m_cDelItem.EnableWindow(FALSE);
    m_userlist.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
    // ::SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
    //////////为列表控件添加列//////////
    m_userlist.InsertColumn(0,"用户ID",LVCFMT_LEFT,60);
    m_userlist.InsertColumn(1,"用户名",LVCFMT_LEFT,100);
    m_userlist.InsertColumn(2,"年龄",LVCFMT_LEFT,60);
    m_userlist.InsertColumn(3,"生日",LVCFMT_LEFT,100);
    //////////读取数据库中的信息添加到列表控件///////////
    int nItem;
    _variant_t vUsername,vBirthday,vID,vOld;
    try
    {
    m_pRecordset.CreateInstance("ADODB.Recordset");
    m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
    m_bSuccess = TRUE;
    while(!m_pRecordset->adoEOF)
    {
    vID = m_pRecordset->GetCollect("ID");
    vUsername = m_pRecordset->GetCollect("username");
    vOld = m_pRecordset->GetCollect("old");
    vBirthday = m_pRecordset->GetCollect("birthday");
    nItem=m_userlist.InsertItem(0xffff,(_bstr_t)vID);
    m_userlist.SetItem(nItem,1,1,(_bstr_t)vUsername,NULL,0,0,0);
    m_userlist.SetItem(nItem,2,1,(_bstr_t)vOld,NULL,0,0,0);
    m_userlist.SetItem(nItem,3,1,(_bstr_t)vBirthday,NULL,0,0,0); m_pRecordset->MoveNext();
    }
    }
    catch(_com_error e)///捕捉异常
    {
    AfxMessageBox("读取数据库失败!");///显示错误信息
    }
      

  5.   

    将第一个SetItemText(...)改为InsertItem( i, name )。
      

  6.   

    将你的代码稍做改动,如下:
    m_personnel.InsertItem(i,0,name);   //改动此行即可
    m_personnel.SetItemText(i,1,department);
    m_personnel.SetItemText(i,2,post);
    m_personnel.SetItemText(i,3,sex);
    m_personnel.SetItemText(i,4,birthdate);
    m_personnel.SetItemText(i,5,telephone);
    m_personnel.SetItemText(i,6,maticulate);
    i++;
    m_pRecordset->MoveNext();
      

  7.   

    archform 表中有许多字段,上面的七个是我想要显示的。其余的字段我不想显示,因为太多了。
      

  8.   

    那你只要在insertItem的时候只把你要的加进去就行了!
      

  9.   

    你只要在该句m_personnel.SetItemText(i,0,name);前加入语句insertItem就行了