各位大佬好,本人菜鸟,在做一个数据库课程设计。课程设计要求用vc和sql server写出一个图书管理程序。目前已经实现了odbc连接,mfc上也实现了程序,但是列表控件ListCtrl怎么调都调不好。选择用图表显示的话就像下图一样整个都是乱的:但是,在数据库里面的数据都是这样子的:我试过把Listctrl调成报告形式,但是那样的话直接什么都显示不出来,整个是空的,不知道为什么。
我想让listctrl里面显示的跟数据库里面的一样,一行行元组挨个显示这样子。此外,每次我单击查询之后,输入一个数据库内不存在的数据,然后它会提示我“没有查到你要找的图书信息”,但是接下来程序里面所有按钮(查询,修改等等)都用不了了,还会提示“attempt to scroll past end or before beginning of data”,不知道为何,我把查询按钮的代码贴上来,问题可能在代码里面。大神们如果有空也可以帮我看一下可以嘛?
新人积分不多,尽量都交出来了,拜托了!课程设计就在这两天,挺急的。
以下是查询按钮的代码:
void CTSGLView::OnButton2() 
{// TODO: Add your control notification handler code here
Csearch Dlg ;
UpdateData(true);
if(Dlg.DoModal()==IDOK)
{ m_pSet->Edit();
Dlg.m_1.TrimLeft(); // 将字符串最前面的空格修整掉
Dlg.m_2.TrimLeft(); // 将字符串最前面的空格修整掉 
Dlg.m_3.TrimLeft(); // 将字符串最前面的空格修整掉
if (Dlg.m_1.IsEmpty()&&Dlg.m_2.IsEmpty()&&Dlg.m_3.IsEmpty())
{MessageBox(" 要查询的条件不能为空! ");
return; 
}
if (m_pSet->IsOpen())
m_pSet->Close(); // 如果记录集打开,则先关闭
if(!(Dlg.m_1.IsEmpty())&&!(Dlg.m_2.IsEmpty())&&(Dlg.m_3.IsEmpty()))
{m_pSet->m_strFilter.Format(" 图书编号 ='%s' AND 书名 ='%s' AND 作者名 ='%s' ",Dlg.m_1,Dlg.m_2,Dlg.m_3);
m_pSet->m_strSort = "图书编号 ASC,书名 ASC,作者名 ASC"; }
else
{m_pSet->m_strFilter.Format(" 图书编号 ='%s' OR 书名 ='%s'OR 作者名 ='%s' ",Dlg.m_1,Dlg.m_2,Dlg.m_3);
// m_strFilter 设置对记录的过滤
m_pSet->m_strSort = "图书编号 ASC,书名 ASC,作者名 ASC";
// m_strSort 设置对记录的排序 .按 number 的降序排列记录 }
m_pSet->Open();
// 打开记录集 .Open 函数在构造 SELECT语句时,
// 会把 m_strFilter 和 m_strSort 的内容放入 SELECT语句的 WHERE 和 ORDER BY 子句 中
if (!m_pSet->IsEOF())
{ m_pSet->Requery(); // 如果打开记录集有记录
UpdateData(false);
OnButton1();
OnInitialUpdate();}
else
MessageBox(" 没有查到你要找的图书信息! ");
} }
}

解决方案 »

  1.   

    报表模式
    DWORD style=C_List.GetExtendedStyle();
    m_List.SetExtendedStyle(style|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
    //以下为插入几个列的列标题
    m_List.InsertColumn(1, _T("列1") , LVCFMT_LEFT,40,1);
    m_List.InsertColumn(2,_T("列2"),LVCFMT_LEFT,40,2);
    m_List.InsertColumn(3,_T("列3"),LVCFMT_LEFT,80,3);
    m_List.InsertColumn(4,_T("列4"),LVCFMT_LEFT,80,4);插入数据时:
    m_List.DeleteAllItems();//清空列表框
    for(int j=0;j<=nCount;j++)
       {
        m_List.InsertItem(j, _T("c"));//首先插入一行,其中的字符可以任意,也可以为空
        str.Format(_T("%d"),j);
        m_List.SetItemText(j,0,str);//设置第一列数据
        str.Format(_T("%d"),j+1);
        m_List.SetItemText(j,1,str);//设置第二列数据,如此可以设置其它列的数据
       }
      

  2.   

    你试一下就知道了,  另外还以一个支持数据库的控件可以参考下 DataGrid  
      

  3.   

    需要绑定数据库并对数据进行修改的话,建议直接用数据组件 DataGrid,因为 ListCtrl 要实现编辑的话,还需要额外自定义很多东西,而数据组件已经帮你实现了编辑和数据更新功能。
      

  4.   

    应该把你Listctrl初始化的代码发上来