我用vb写的程序,datagrid分页显示,最后一页不知道怎么处理?

jayaigg 2010-10-12 11:48:16
我用vb写的程序,datagrid分页显示,最后一页不知道怎么处理? 当记录数不是nPageSize (每页显示的纪录)的整数倍的时候,就出现错误了,该怎么写语句修复啊??热心的人帮帮
...全文
167 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LHMLHM123 2012-07-13
  • 打赏
  • 举报
回复

出错处理,直接跳到绑定就可以显示不满页面剩下的记录了
objrs.Open
On Error GoTo err
For lCount = 1 To nPageSize
objrs.AddNew
objrs!时间 = adoPrimaryRS!时间
objrs!姓名 = adoPrimaryRS!姓名
objrs!奖励事项 = adoPrimaryRS!奖励事项
objrs!违规事项 = adoPrimaryRS!违规事项
adoPrimaryRS.MoveNext
Next
err:
''绑定
Set DataGrid1.DataSource = objrs
有问题找BAIDU 2011-07-21
  • 打赏
  • 举报
回复
感觉是因为adoPrimaryRS 中数据不足于使lcount = npagesize
当最后个数据读完后,程序因为FOR语句关系仍会从adoPrimaryRS中读数据
当那时adoPrimaryRS已为空,所以报错
有问题找BAIDU 2011-07-21
  • 打赏
  • 举报
回复
是到最后一页 objrs!时间 = adoPrimaryRS!时间 报错么

如果是,可以在objrs.AddNew前放句
if not adoPrimaryRS.eof then
.......
......
......
adoPrimaryRS.movenext
end if
MAFUWAN15 2010-10-12
  • 打赏
  • 举报
回复
'自定义分页过程
Private Sub Controllv(lCurrentPage As Integer)
Dim PageCount As Integer
Rs4.PageSize = 5
PageCount = Rs4.PageCount

If Rs4.RecordCount = 0 Then Exit Sub
If lCurrentPage > PageCount Then
CurrentPage = PageCount
End If

Rs4.AbsolutePage = CurrentPage
Dim Litm As ListItem
ListView1.ListItems.Clear

'Rs4.MoveFirst
For i = 1 To Rs4.PageSize
Set Litm = ListView1.ListItems.Add()
Litm.Text = Rs4.Fields(1).Value
Litm.SubItems(1) = myR.Getoperate(Rs4.Fields(2).Value)
Litm.SubItems(2) = Rs4.Fields(3).Value
Rs4.MoveNext
If Rs4.EOF = True Then Exit For
Next
Text1.Text = CurrentPage & "/" & PageCount & "页"
End Sub
这是LISTVIEW分页的,意思一样的吧
在最后一页的时候,一定要判断是否到了记录尾要退出
jayaigg 2010-10-12
  • 打赏
  • 举报
回复
大家都给点意见啊!!
jayaigg 2010-10-12
  • 打赏
  • 举报
回复
这是我的程序代码:
Dim adoPrimaryRS As ADODB.Recordset
Dim lPageCount As Long
Dim nPageSize As Integer
Dim lCount As Long
nPageSize = 3
Set adoPrimaryRS = New ADODB.Recordset
adoPrimaryRS.Open "select * from 奖励违规表", conn, adOpenStatic, adLockOptimistic
adoPrimaryRS.PageSize = nPageSize
lPageCount = adoPrimaryRS.PageCount
If lCurrentPage > lPageCount Then
lCurrentPage = lPageCount
End If
adoPrimaryRS.AbsolutePage = lCurrentPage
Dim objrs As New ADODB.Recordset
For lCount = 0 To adoPrimaryRS.Fields.Count - 1
objrs.Fields.Append adoPrimaryRS.Fields(lCount).Name, adVarChar, adoPrimaryRS.Fields(lCount).DefinedSize
Next
objrs.Open
For lCount = 1 To nPageSize
objrs.AddNew
objrs!时间 = adoPrimaryRS!时间
objrs!姓名 = adoPrimaryRS!姓名
objrs!奖励事项 = adoPrimaryRS!奖励事项
objrs!违规事项 = adoPrimaryRS!违规事项
adoPrimaryRS.MoveNext
Next
Set DataGrid1.DataSource = objrs
jayaigg 2010-10-12
  • 打赏
  • 举报
回复
望版主关注下啊,,不胜感谢!!!
jayaigg 2010-10-12
  • 打赏
  • 举报
回复
楼上的,好像和我想的不一样吧,我的DATAGRID到记录尾,最后一页如果记录不满,就出错,我要它显示出来,不是退出啊!可能是我理解不了你的思路吧,,还是谢谢!!
有没有人说说DATAGRID的怎么弄啊?
VB DataGrid分页 请看: 数据库:test2000.mdb 表:numbers 字段:Id(自动编号),anumber(数字) 因为DataGrid控件我们采用直接绑定记录集来显示数据.所以分页处理我们采用了间接的办法,定义另一个记录集objrs,将分页后的记录集付给objrs.然后绑定DataGrid ''效果还不错 , 我加了详细地注释,像pagesize, AbsolutePage的用法可参考msdn VB中新建工程,form中添加DataGrid控件,按钮cmdPrevious和cmdNext,文本框txtPage ''引用microsoft active data object 2.x object library Option Explicit Dim conn As ADODB.Connection Dim lCurrentPage As Long Private Sub cmdNext_Click() lCurrentPage = lCurrentPage + 1 Call Loadcontrol(lCurrentPage) End Sub Private Sub cmdPrevious_Click() If lCurrentPage > 1 Then lCurrentPage = lCurrentPage - 1 Call Loadcontrol(lCurrentPage) End If End Sub Private Sub Form_Load() Set conn = New ADODB.Connection conn.CursorLocation = adUseClient conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\test2000.mdb;" lCurrentPage = 1 Call Loadcontrol(lCurrentPage) End Sub Private Sub Loadcontrol(lPage As Long) Dim adoPrimaryRS As ADODB.Recordset Dim lPageCount As Long Dim nPageSize As Integer Dim lCount As Long ''每页显示的纪录 nPageSize = 10 Set adoPrimaryRS = New ADODB.Recordset adoPrimaryRS.Open "select * from numbers", conn, adOpenStatic, adLockOptimistic adoPrimaryRS.PageSize = nPageSize ''页数 lPageCount = adoPrimaryRS.PageCount If lCurrentPage > lPageCount Then lCurrentPage = lPageCount End If adoPrimaryRS.AbsolutePage = lCurrentPage ''定义另一个记录集 Dim objrs As New ADODB.Recordset ''添加字段名称 For lCount = 0 To adoPrimaryRS.Fields.Count - 1 objrs.Fields.Append adoPrimaryRS.Fields(lCount).Name, adVarChar, adoPrimaryRS.Fields(lCount).DefinedSize Next ''打开记录集 objrs.Open ''将指定记录数循环添加到objrs中 For lCount = 1 To nPageSize objrs.AddNew objrs!id = adoPrimaryRS!id objrs!anumber = adoPrimaryRS!anumber adoPrimaryRS.MoveNext Next ''绑定 Set DataGrid1.DataSource = objrs ''在文本框显示页数 txtPage = lPage & "/" & adoPrimaryRS.PageCount End Sub Private Sub Form_Unload(Cancel As Integer) If Not conn Is Nothing Then conn.Close End If Set conn = Nothing End Sub ‘文本框中输入页数,回车跳转到指定位置 Private Sub txtPage_KeyDown(KeyCode As Integer, Shift As Integer) lCurrentPage = Val(txtPage.Text) Call Loadcontrol(lCurrentPage) End Sub

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧