MFC中實現ListControl翻頁功能
一。寫程式碼前的準備:
功能如下:
1.創造工程 testDlg,在對話方塊標頭檔案中定義,四個公有變數
int pageNo; //頁數編號
int pageSize; // 每頁顯示條數
int intStart; // 開始記錄
int intEnd; // 結束記錄
int max_page; // 記錄最大頁數
2.在控制元件上新增一個列表框控制元件,四個按鈕,一個static控制元件IDIDC_STATIC_SHOWPAGE,控制元件顯示是第幾頁和一共幾頁。 分別為四個按鈕新增響應函式。在建構函式中,初始化
pageSize=10;
pageNo=1;
二,為按鈕新增響應函式
void CTestDlg::OnBtnFirst() // 第一頁
{
if (pageNo == 1)
{
AfxMessageBox(_T("已是第一頁"));
}
else
{
pageNo = 1;
m_ctlList.DeleteAllItems();
ListShow();
}
}
void CTestDlg::OnBtnPageup() // 上一頁
{
if(pageNo==1)
{
AfxMessageBox(_T("已是第一頁"));
}
if(pageNo>1)
{
pageNo--;
m_ctlList.DeleteAllItems();
ListShow();
}
}
void CTestDlg::OnBtnPagedown() // 下一頁
{
pageNo++;
if (pageNo > max_page)
{
pageNo--;
AfxMessageBox("已是最後一頁");
return;
}
m_ctlList.DeleteAllItems();
ListShow();
}
void CTestDlg::OnBtnLast() // 最後一頁
{
if (pageNo == max_page)
{
AfxMessageBox("已是最後一頁");
return;
}
else
{
pageNo = max_page;
m_ctlList.DeleteAllItems();
ListShow();
}
}
三。構造風格和顯示資料
void CTestDlg::ListStyle() // 設定List Control風格
{
m_ctlList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_ctlList.InsertColumn(0,"學號",LVCFMT_LEFT,100);
m_ctlList.InsertColumn(1,"姓名", LVCFMT_CENTER, 100);
m_ctlList.InsertColumn(2,"數學",LVCFMT_CENTER,100);
m_ctlList.InsertColumn(3,"英語",LVCFMT_CENTER,100);
}
- void CTestDlg::ListShow() // 將資料顯示在List Control裡,顯示頁數,顯示訊息提示
- {
int i_num = 0;
char chrTemp='%';
intStart = pageSize * (pageNo-1);
intEnd = pageSize * pageNo;
try
{
if(testSet.IsOpen())
{
testSet.Close();
}
testSet.m_strFilter.Format("學號 like '%c%s%c' ", chrTemp , "", chrTemp);
testSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
while(!testSet.IsEOF()) // 輸出匹配上查詢條件使用者記錄,直到記錄為空
{
if (i_num >= intStart && i_num < intEnd) // 根據頁數顯示相應資料
{
i_num = i_num % pageSize;
CString strTemp;
strTemp.Format("%d",testSet.m_column1);
m_ctlList.InsertItem(i_num,strTemp);
m_ctlList.SetItemText(i_num, 1,testSet.m_column2);
strTemp.Format("%d",testSet.m_column3);
m_ctlList.SetItemText(i_num, 2, strTemp);
strTemp.Format("%d",testSet.m_column4);
m_ctlList.SetItemText(i_num, 3, strTemp);
if (pageNo >= 2) // 當頁數為1時,i的值就是其本身,如果頁數大於1時,i的值恢復到取餘以前
{
i_num += (pageNo -1) * pageSize;
}
}
i_num++;
testSet.MoveNext(); // 記錄遊標移到下一條記錄
}
if (i_num % pageSize == 0)
{
max_page = i_num / pageSize;
}
else
{
max_page = i_num / pageSize + 1;
}
if(testSet.IsOpen()) // 關閉記錄集
{
testSet.Close();
}
}
catch(CDBException*e)
{
e->ReportError ();
return;
}
CString strShowPage, strpageNo, strMaxPage;
strpageNo.Format("第 %d 頁 ", pageNo);
strMaxPage.Format("共 %d 頁", max_page);
strShowPage.Format(strpageNo + strMaxPage);
GetDlgItem(IDC_STATIC_SHOWPAGE)->SetWindowText(strShowPage);
}