各位大佬好,本人菜鳥,在做一個資料庫課程設計。課程設計要求用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(" 沒有查到你要找的圖書資訊! ");
} }
}
uj5u.com熱心網友回復:
報表模式
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);//設定第二列資料,如此可以設定其它列的資料
}
uj5u.com熱心網友回復:
謝謝,我有點不太明白,這些資料我資料庫里面已經有了,我想問問直接套您的模板就可以了嗎
uj5u.com熱心網友回復:
你試一下就知道了,另外還以一個支持資料庫的控制元件可以參考下 DataGrid
uj5u.com熱心網友回復:
需要系結資料庫并對資料進行修改的話,建議直接用資料組件 DataGrid,因為 ListCtrl 要實作編輯的話,還需要額外自定義很多東西,而資料組件已經幫你實作了編輯和資料更新功能。uj5u.com熱心網友回復:
應該把你Listctrl初始化的代碼發上來轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/67051.html
標籤:基礎類
