CListCtrl中,插入的第10列时这样:InsertColumn(9, "OOO");
第11列这么写时 InsertColumn(10, "OOOX"); 这一列无法显示,并且程序出现Debug Error,只能中止。 为什么会这样,应该如何插入第11列及之后的列数?
第11列这么写时 InsertColumn(10, "OOOX"); 这一列无法显示,并且程序出现Debug Error,只能中止。 为什么会这样,应该如何插入第11列及之后的列数?
发下完整代码。
CDialog::OnInitDialog(); //初始化里CList 控件的和header
m_list.InsertColumn(0,"姓名");
m_list.InsertColumn(1,"班级");
m_list.InsertColumn(2,"支部");
m_list.InsertColumn(3,"入学时间");
m_list.InsertColumn(4,"发展时间");
m_list.InsertColumn(5,"是否转正");
m_list.InsertColumn(6,"获奖情况");
m_list.InsertColumn(7,"联系方式");
m_list.InsertColumn(8,"职务");
m_list.InsertColumn(9,"性别");
m_list.InsertColumn(10,"民族");
m_list.InsertColumn(11,"出生日期"); //设置header的宽度
RECT rectList;
m_list.GetWindowRect(&rectList);
int wid=rectList.right-rectList.left-11;
for(int i=0;i<12;i++)
{
m_list.SetColumnWidth(i,wid/12);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
} //定义数据库对象
ADOConn m_ADOConn;
m_ADOConn.OnInitADOConn();//连接数据库 CString sql;
sql.Format("select * from Info");
_RecordsetPtr m_pRecordset;//定义记录集对象 //打开记录集
m_pRecordset = m_ADOConn.GetRecordSet((_bstr_t)sql); //遍历记录集
while(m_ADOConn.m_pRecordset->adoEOF == 0)
{
//将获取的记录显示到列表框内
m_list.InsertItem(0,"");
m_list.SetItemText(0,0,(char *)(_bstr_t)m_pRecordset->GetCollect("姓名"));
m_list.SetItemText(0,1,(char *)(_bstr_t)m_pRecordset->GetCollect("班级"));
m_list.SetItemText(0,2,(char *)(_bstr_t)m_pRecordset->GetCollect("支部"));
m_list.SetItemText(0,3,(char *)(_bstr_t)m_pRecordset->GetCollect("入学时间"));
m_list.SetItemText(0,4,(char *)(_bstr_t)m_pRecordset->GetCollect("发展时间"));
m_list.SetItemText(0,5,(char *)(_bstr_t)m_pRecordset->GetCollect("是否转正"));
m_list.SetItemText(0,6,(char *)(_bstr_t)m_pRecordset->GetCollect("获奖情况"));
m_list.SetItemText(0,7,(char *)(_bstr_t)m_pRecordset->GetCollect("联系方式"));
m_list.SetItemText(0,8,(char *)(_bstr_t)m_pRecordset->GetCollect("职务"));
m_list.SetItemText(0,9,(char *)(_bstr_t)m_pRecordset->GetCollect("性别"));
m_list.SetItemText(0,10,(char *)(_bstr_t)m_pRecordset->GetCollect("民族"));
m_list.SetItemText(0,11,(char *)(_bstr_t)m_pRecordset->GetCollect("出生日期"));
m_pRecordset->MoveNext();
}
//断开数据库连接
m_ADOConn.ExitConnect();
ADOConn m_ADOConn;这也设个断点
调试下。
可是当我注释掉
m_list.InsertColumn(10,"民族");
m_list.InsertColumn(11,"出生日期");和
m_list.SetItemText(0,10,(char *)(_bstr_t)m_pRecordset->GetCollect("民族"));
m_list.SetItemText(0,11,(char *)(_bstr_t)m_pRecordset->GetCollect("出生日期"));
信息就能正常显示
InsertColumn()即使执行失败也不会有这样的错误.
应该是数据库访问这部分出错了。试下加异常处理。 try
{
ADOConn m_ADOConn;
m_ADOConn.OnInitADOConn();//连接数据库 CString sql;
sql.Format("select * from Info");
_RecordsetPtr m_pRecordset;//定义记录集对象 //打开记录集
m_pRecordset = m_ADOConn.GetRecordSet((_bstr_t)sql); //遍历记录集
while(m_ADOConn.m_pRecordset->adoEOF == 0)
{
//将获取的记录显示到列表框内
m_list.InsertItem(0,"");
m_list.SetItemText(0,0,(char *)(_bstr_t)m_pRecordset->GetCollect("姓名"));
m_list.SetItemText(0,1,(char *)(_bstr_t)m_pRecordset->GetCollect("班级"));
m_list.SetItemText(0,2,(char *)(_bstr_t)m_pRecordset->GetCollect("支部"));
m_list.SetItemText(0,3,(char *)(_bstr_t)m_pRecordset->GetCollect("入学时间"));
m_list.SetItemText(0,4,(char *)(_bstr_t)m_pRecordset->GetCollect("发展时间"));
m_list.SetItemText(0,5,(char *)(_bstr_t)m_pRecordset->GetCollect("是否转正"));
m_list.SetItemText(0,6,(char *)(_bstr_t)m_pRecordset->GetCollect("获奖情况"));
m_list.SetItemText(0,7,(char *)(_bstr_t)m_pRecordset->GetCollect("联系方式"));
m_list.SetItemText(0,8,(char *)(_bstr_t)m_pRecordset->GetCollect("职务"));
m_list.SetItemText(0,9,(char *)(_bstr_t)m_pRecordset->GetCollect("性别"));
m_list.SetItemText(0,10,(char *)(_bstr_t)m_pRecordset->GetCollect("民族"));
m_list.SetItemText(0,11,(char *)(_bstr_t)m_pRecordset->GetCollect("出生日期")); m_pRecordset->MoveNext();
}
//断开数据库连接
m_ADOConn.ExitConnect();
}catch(_com_error& e)
{
MessageBox(e.Description(), e.ErrorMessage());
}