1. 程式人生 > >MFC中實現ListControl翻頁功能

MFC中實現ListControl翻頁功能

一。寫程式碼前的準備:

功能如下:

【MFC】實現 List Control 翻頁 - 小馬野 - MFC交流區

 

    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);

}

  1. void CTestDlg::ListShow() // 將資料顯示在List Control裡,顯示頁數,顯示訊息提示  
  2. {

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);


}