当前位置:编程学习 > VB >>

求教关于MSHFlexGrid分页的问题

Private Sub Form_Load()
Dim sql As String
maxRecord = 2 '每页显示最大记录数
pageIndex = 1 '设置当前页码为1
sql = "Select * from [doc] order by docID DESC"
Call getData(sql) '连接数据库
Call showData '显示样式
pages = rs.RecordCount / maxRecord '总页数
End Sub

Private Sub btnUp_Click()
'向前翻页
pageIndex = pageIndex - 1
End Sub

Private Sub btnDown_Click()
'向后翻页
pageIndex = pageIndex + 1
End Sub

Private Function showData()
Dim i As Integer
With MSHFlexGrid1
.Redraw = False
.Cols = 6
If rs.RecordCount <= maxRecord Then
.Rows = rs.RecordCount + 1
Else
.Rows = maxRecord + 1
End If
.TextMatrix(0, 1) = "来文字号"
.TextMatrix(0, 2) = "文件标题"
.TextMatrix(0, 3) = "文件日期"
.TextMatrix(0, 4) = "主题词"
.TextMatrix(0, 5) = "存放位置"
For i = 1 To (.Rows - 1)
.TextMatrix(i, 0) = rs.Fields("docID")
rs.MoveNext
Next i
For i = 0 To 5
.ColAlignment(i) = 3
Next i
.Redraw = True
End With
End Function

基本代码是这样的,用btnUp_Click(),btnDown_Click()实现翻页功能
请问该怎么写btnUp_Click(),btnDown_Click()这两个函数?
应该是用rs.Index来定位某页显示的记录吧?可是我研究了半天也没找到方法

特向各位大侠求教
非常感谢~~~~~~~~~~~~~~~~~ --------------------编程问答-------------------- 利用rs.pagesize 和rs.pagecount属性. --------------------编程问答-------------------- 楼上可以说详细点吗?
非常感谢 --------------------编程问答-------------------- 继续求教,谢谢! --------------------编程问答-------------------- Private Sub Form_Load()
Dim sql As String
maxRecord = 2 '每页显示最大记录数
pageIndex = 1 '设置当前页码为1
sql = "Select * from [doc] order by docID DESC"
Call GetData(sql) '连接数据库
Call showData '显示样式
Rs.PageSize = maxRecord
Pages = Rs.PageCount
End Sub

Private Sub btnUp_Click()
'向前翻页
If Not Rs.BOF Then
    For i = 1 To maxRecord
        Rs.MovePrevious
    Next
End If
showData
End Sub

Private Sub btnDown_Click()
'向后翻页
If Not Rs.EOF Then
    For i = 1 To maxRecord
        Rs.MoveNext
    Next
End If
showData
End Sub

showData里面 
For i = 1 To (.Rows - 1)
.TextMatrix(i, 0) = Rs.Fields("docID")
If i < .Rows - 1 Then Rs.MoveNext
Next 


当然,,,如果支持 rs.AbsolutePage 可以直接定位page (以上不支持) --------------------编程问答-------------------- 非常感谢楼上的帮助
但是我发现了个奇怪的问题

Private Sub btnDown_Click()
If Not rs.EOF Then
Call showData
MsgBox (rs.AbsolutePage)
End If
End Sub

Private Sub btnUp_Click()
If Not rs.BOF Then
Call showData
MsgBox (rs.AbsolutePage)
End If
End Sub

Private Function showData()
Dim i As Integer
rs.PageSize = 2
With MSHFlexGrid1
.Redraw = False
.Cols = 6
If rs.RecordCount <= rs.PageSize Then
.Rows = rs.RecordCount + 1
Else
.Rows = rs.PageSize + 1
End If
.TextMatrix(0, 1) = "来文字号"
.TextMatrix(0, 2) = "文件标题"
.TextMatrix(0, 3) = "文件日期"
.TextMatrix(0, 4) = "主题词"
.TextMatrix(0, 5) = "存放位置"

For i = 1 To (.Rows - 1)
If Not rs.EOF Then
.TextMatrix(i, 0) = rs.Fields("docID")
rs.MoveNext
End If
Next i

For i = 0 To 5
.ColAlignment(i) = 3
Next i
.Redraw = True
End With
End Function

一共有四页记录,上面代码执行后,在没有到最后一页之前,点btnUp,btnDown会自动向后翻页,可是这两个按钮我仅仅调用了显示函数,为什么会自动向后翻页?
另外,点btnUp,btnDown后msgBox显示的rs.AbsolutePage不对,初始化后点一下任一个按钮,会自动向后翻页并显示rs.AbsolutePage为3,而这个时候正确的rs.AbsolutePage应该是2,而且当翻到最后一页的时候rs.AbsolutePage显示为-3,请问为什么?
求教,非常感谢大家的帮助~~~~~~~~~~~ --------------------编程问答-------------------- 在本页最后一条记录的时候要注意,不要movenext了,否则进入了下一页.
上面我就就写了 If i < .Rows - 1 Then Rs.MoveNext 啊
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,