list control不显示数据问题

当从数据库查询并在list control中显示时,没有显示数据,通过调试发现已经从数据库中获得所查询的记录值,但就是不在listcontrol中显示。问题在于SetItemText()之前没有进行InsertItem(),所以在每次进行SetItemText()应该先InsertItem()一行或多行。代码如下:

CDataBase::Open();
 pRecordset=CDataBase::Query(strsql);
 int index=0;
 CString m_ID,m_name,m_title,m_department;
 while(!pRecordset->adoEOF)
 {

  m_doctorlist.InsertItem(index,_T(""));//先插入一列,然后才设置内容
  _variant_t var=pRecordset->GetCollect("医生编号");
  if(var.vt!=VT_NULL)
   m_ID=(LPCSTR)_bstr_t(var);
  //AfxMessageBox(m_ID);
  var=pRecordset->GetCollect("医生姓名");
  if(var.vt!=VT_NULL)
   m_name=(LPCSTR)_bstr_t(var);
  //AfxMessageBox(m_name);
  var=pRecordset->GetCollect("职称");
  if(var.vt!=VT_NULL)
   m_title=(LPCSTR)_bstr_t(var);
  var=pRecordset->GetCollect("科室");
  if(var.vt!=VT_NULL)
   m_department=(LPCSTR)_bstr_t(var);

  m_doctorlist.SetItemText(index,0,m_ID);//index为行,0为列
  m_doctorlist.SetItemText(index,1,m_name);
  m_doctorlist.SetItemText(index,2,m_title);
  m_doctorlist.SetItemText(index,3,m_department);
  index++;

  pRecordset->MoveNext();
 }

 CDataBase::Close();

在MFC中,如果你想让`CListCtrl`中的数据显示自动换行,你通常需要设置该控件的属性以及列的属性。可以通过设置列的宽度为自动调整宽度(`LVS_REPORT`样式下)来确保数据能够根据内容自动换行。此外,还可以通过消息处理函数来设置具体的换行逻辑。具体操作步骤如下: 1. 确保`CListCtrl`控件的样式包含了`LVS_REPORT`。这个样式下,列会根据内容自动调整宽度,并且支持自动换行。 2. 使用`SetColumnWidth`函数设置列的宽度为`LVSCW_AUTOSIZE`。这样,列宽会根据内容自动调整,如果内容过长,会自动换行显示。例如: ```cpp listCtrl.SetColumnWidth(nCol, LVSCW_AUTOSIZE); ``` 3. 如果你有特定的列需要特别设置为自动换行,可以调用`ModifyStyle`方法来修改列的样式,允许换行。例如,对于第三列: ```cpp listCtrl.ModifyColumn(2, LVCFMT_LEFT | LVCFMT_AUTOSIZE_USEHEADER | LVCFMT-wrap); ``` 4. 如果需要对整个控件进行设置,可以通过发送`LVM_SETEXTENDEDLISTVIEWSTYLE`消息来修改整个列表控件的扩展样式,加入`LVS_EX_FULLROWSELECT`和`LVS_EX_SUBITEMIMAGES`,这样会支持列宽的自动调整。 ```cpp listCtrl.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); ``` 请注意,MFC本身并不直接提供一个设置自动换行的属性或方法,而是通过上述方式来实现类似的功能。具体实现可能还需要根据你的应用程序的具体情况来调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值