mysql数据库使用clistctrl显示如何样实现分页

mysql数据库使用clistctrl显示怎么样实现分页
如题,怎么样实现上一页,下一页,高效率执行显示?

------解决方案--------------------
下图是我做的实例:(不知道能不能显示出来)


根据页码条件取数据
CString sqlstr;
sqlstr.Format( L"SELECT * FROM datatable ORDER BY updatedate LIMIT %i, %i;",
m_nCountOfPage * m_nPageNum,
m_nCountOfPage);

填充
int num = m_nCountOfPage * m_nPageNum + 1;
ds.MoveFirst();
for( int i = 0; !ds.IsEOF(); i++, num++ )
{
InsertItem( i, ds.m_ID );
CString str, str2, str3;
str.Format(L"%i", num);
SetItemText( i, 1, str );
SetItemText( i, 2, ds.m_number );
SetItemText( i, 3, ds.m_name );
SetItemText( i, 4, ds.m_sexstr );
if( (ds.m_birthday.m_status != COleDateTime::valid) || (ds.m_birthday.m_dt == 0) ){
str = _T("");
str2 = _T("");
}
else
{
str = ds.m_birthday.Format( _T("%Y-%m-%d") );
str2.Format( L"%i", ds.m_age);
}
SetItemText( i, 5, str );
SetItemText( i, 6, str2 );
if( (ds.m_regday.m_status != COleDateTime::valid) || (ds.m_regday.m_dt == 0) )
str = _T("");
else
str = ds.m_regday.Format( _T("%Y-%m-%d") );
SetItemText( i, 7, str );
if( (ds.m_scanday.m_status != COleDateTime::valid) || (ds.m_scanday.m_dt == 0) || ds.m_scancount == 0 ) // 没有扫描次数时,不显示扫描日期。
str = _T("");
else
str = ds.m_scanday.Format( _T("%Y-%m-%d") );
SetItemText( i, 8, str );
str.Format( L"%i", ds.m_scancount );
SetItemText( i, 9, str );
SetItemText( i, 10, ds.m_note );
//SetItemData(i, i);
ds.MoveNext();
}


------解决方案--------------------
用 virtual list ctrl 实现。

http://www.codeproject.com/Articles/7891/Using-virtual-lists