用DBGrid一次显示太多数据记录,看起来太多.怎么做一次显示20条记录,点击一个按钮后显示下一个20条记录
即可以实现"第一页" "下一页" "上一页" "最后一页"的翻滚数据记录功能?谢谢!

解决方案 »

  1.   

    请参考:http://community.csdn.net/Expert/topic/5366/5366047.xml?temp=.6152765http://community.csdn.net/Expert/topic/5352/5352057.xml?temp=.8028528
      

  2.   

    找出你想要分页的字段值  用该字段的记录判断      nmm_SqlStr := 'SELECT dbo.NEGM_Log.MsgTime AS MsgTime, dbo.EMS_Employees.C_Name AS C_Name, '
          +' (CASE dbo.NEGM_Log.SendOrReceive WHEN 1 THEN ''发送'' WHEN 2 THEN ''接收'' END) '
          +' AS Send,(CASE dbo.NEGM_Log.MsgOrFile WHEN 1 THEN ''消息'' WHEN 2 THEN ''文件'' END) AS PType '
          +' FROM %s.dbo.EMS_Employees INNER JOIN '
          +' %s.dbo.NEGM_Log ON dbo.EMS_Employees.ID = dbo.NEGM_Log.UserID where dbo.NEGM_Log.ID = ' + IntToStr(nmm_intID)
          +' and (DATEDIFF(day, MsgTime, GetDate()) >='+ IntToStr(GetCpareTime(cbb2.ItemIndex))+ ')'+ 'and (dbo.NEGM_Log.SendOrReceive =' + IntToStr(cbb3.ItemIndex)+')';
    ------------------------------------------------------------这条语句是我根据时间类型,也就是数据库中有个MsgTime字段来判断,取出cbb2.ItemIndex的索引值,判断几天为限进行分页   
    精髓在这句 DATEDIFF(day, MsgTime, GetDate()) >='+ IntToStr(GetCpareTime(cbb2.ItemIndex))   当然也可以根据ID,或则你所标志的任意的类型判断都可以,变通实现
      

  3.   

    GetCpareTime 是我写的一个函数,根据天,周,月,年来查找的 
    不要被其所迷惑
      

  4.   

    TO: lihuasoft(学习低调做人) ,
    谢谢!
    你介绍的方法似乎可行,但怎么保证在点击下一页的时候,只是到最后记录就停止呢?
    因为一直点击“下一页”的时候即使没有记录也会形成一个空的记录页,当点击“上一页”时候要点击相同的次数才能回到有记录的页。
      

  5.   

    谢谢楼主的认可。至于这个演示,确是需要继续完善,才能使用到实际应用中的。那么就由楼主自己努力吧,OK?代码很简单的,无非就是一个全局变量与一个分页select查询的应用。