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


}

猜你喜欢

转载自blog.csdn.net/xueluowutong/article/details/81588032
今日推荐