如题,怎么样实现上一页,下一页,高效率执行显示?

解决方案 »

  1.   

    下图是我做的实例:(不知道能不能显示出来)
    根据页码条件取数据
    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();
    }
      

  2.   

    用 virtual list ctrl 实现。http://www.codeproject.com/Articles/7891/Using-virtual-lists
      

  3.   

    每次sql语句获取对应数目的数据从数据库,然后显示到ListCtrl
      

  4.   

    如果CListCtrl显示是list的数据,用上一页,下一页来控制每一页显示3条数据,怎么控制CListCtrl的显示? 从哪发送LVM_SETITEMCOUNT设置SetItemCount(3)来设置每一页显示的条目,数据在哪里刷新?