请问ListCtrl如何分页显示数据库内容? 我想用ListCtrl如何分页显示数据库内容,比如我想每页显示20条,点下一页或上一页再显示下20条或前20条,该如何写代码? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前单位的牛人是重写,派生了一个自己的listctrl实现的不过他那个是比较麻烦的,是icon形式的,我估计你这个是report形式的通过操作滚动条来实现上下翻页呢,呵呵俺也不知道行不行,没试过 为什么一定要listctrl,数据库应该用... 显示没有问题,主要是得到想得到的数据。ADO中RecordSet对象中有有关page的属性。研究一下看看。 对数据库进行分页,用按钮控制,然后分页显示到LIST上 肯定是在滚动条上添加方法ADO的_RecordsetPtr具有MoveNext,MoveFirst方法和RecordCount属性,通过这些,应该可以在ListCtrl里动态地加载多少条数据当ListCtrl的控制条到底部时,再点击,就加载多少单位条记录关于ListCtrl添加控制条点击函数。找找吧!有的。本人没有实际编过一个像样的VC++程序 一般是通过SQL语句的TOP,ORDER BY ,WHERE关键字和主键来实现的给你个示例代码//===============================加载BASS281========================================// // 从数据库中获取218设备数量 if(!CAccessServer::GetRecordCount("BassSeting WHERE strType='281'",nCount)) { return FALSE; } // 数据库表的页数:分批加载 nPageSize = 256; if((nCount % nPageSize) == 0) { nPageCount = nCount / nPageSize; } else { nPageCount = nCount / nPageSize + 1; } // 从数据库当中加载设备:分页加载 nPagePosition = 0; for (i=0; i<nPageCount; i++) { strSQL.Format("SELECT TOP %d * FROM BassSeting WHERE (strType='281') AND (dwID > %d) ORDER BY dwID",nPageSize,nPagePosition); // 获取记录 if(!CAccessServer::GetRecord(strSQL,arrItem)) { continue; } // 获取读取的记录数量 int nCount = arrItem.GetSize(); if (nCount<=0){ continue; } // 提取数据 for (int k=0; k<nCount; k++) { ctrlBass281.strIP = arrItem[k].strIP; ctrlBass281.wSendPort = arrItem[k].wSendPort; ctrlBass281.wRecvPort = arrItem[k].wRecvPort; // 添加元素 if(!AddBass281(ctrlBass281)) { continue; } // 保存到缓冲区:提供后续的路径树型控件初始化使用 CBassTreeArray::SetItem(arrItem[k]); } nPagePosition = arrItem[nCount-1].dwID; } 根据数据记录总数和list可显示的行数,算出总的页数,移动list时,根据顶行的索引号,算出所对应该的页号,余下的工作就是根据页号从数据库中取出每页的记录而已 关于 继承 与构成函数的问题 如何控制BUTTON? 招聘时应注意一些什么? MFC和Win32两个应用程序有什么不同? 如何在自画的圆中添加文字? 有没有录音和放音的源程序参考一下 内存访问错误,参与者有分! 送分题:如何历遍对话框中的所有控件?(高分送上) vc++如何调用webservice接收结构体 各位,各位你们是如何学MTS,DNA的啊,我头都大了好几尺啊...... DLL怎么调试呢? 网络对时:如何和服务器进行通信
不过他那个是比较麻烦的,是icon形式的,我估计你这个是report形式的通过操作滚动条来实现上下翻页呢,呵呵
俺也不知道行不行,没试过
ADO的_RecordsetPtr具有MoveNext,MoveFirst方法和RecordCount属性,通过这些,应该可以在ListCtrl里动态地加载多少条数据当ListCtrl的控制条到底部时,再点击,就加载多少单位条记录
关于ListCtrl添加控制条点击函数。找找吧!有的。本人没有实际编过一个像样的VC++程序
//===============================加载BASS281========================================// // 从数据库中获取218设备数量
if(!CAccessServer::GetRecordCount("BassSeting WHERE strType='281'",nCount))
{
return FALSE;
} // 数据库表的页数:分批加载
nPageSize = 256;
if((nCount % nPageSize) == 0)
{
nPageCount = nCount / nPageSize;
}
else
{
nPageCount = nCount / nPageSize + 1;
}
// 从数据库当中加载设备:分页加载
nPagePosition = 0;
for (i=0; i<nPageCount; i++)
{
strSQL.Format("SELECT TOP %d * FROM BassSeting WHERE (strType='281') AND (dwID > %d) ORDER BY dwID",nPageSize,nPagePosition); // 获取记录
if(!CAccessServer::GetRecord(strSQL,arrItem))
{
continue;
} // 获取读取的记录数量
int nCount = arrItem.GetSize();
if (nCount<=0){
continue;
}
// 提取数据
for (int k=0; k<nCount; k++)
{
ctrlBass281.strIP = arrItem[k].strIP;
ctrlBass281.wSendPort = arrItem[k].wSendPort;
ctrlBass281.wRecvPort = arrItem[k].wRecvPort; // 添加元素
if(!AddBass281(ctrlBass281))
{
continue;
} // 保存到缓冲区:提供后续的路径树型控件初始化使用
CBassTreeArray::SetItem(arrItem[k]);
}
nPagePosition = arrItem[nCount-1].dwID;
}