2,723
社区成员
发帖
与我相关
我的任务
分享
现在最流行的显示方式就是分页显示了,在vs中datagridview控件支持分页显示。分页显示的实质就是将用户请求的数据通过技术手段分成若干的段,当用户跳转到相应的页面时,才呈现相应的数据;这样的好处是:对于一些大的数据,通过分散显示的方式(实际也是分散查询),让用户体会不到数据查询的缓慢。
分页技术的实现实际就是查询技术的分解
1、首先要统计记录总数
2、根据记录数、每页记录数算出总页数
3、根据页码查询相应的记录数,任意页则根据recn()函数确定记录范围
总之,VFP天生为数据而生,操作数据比VS强,做分页很拿手
用 Grid 分页显示
注:如果表有索引,显示的顺序为索引顺序而不是物理顺序
在表单加一个 Grid 控件
在表单加一个按钮:如其 Name 为 Command100 (或用表单方法也可以),其 Visible 属为 .F.,其 Click 事件代码为:
Thisform.Grid1.recordsource=Null
Thisform.Grid1.ColumnCount=-1
Select Recno() As jlh,* Into Cursor T2 From "&gnTableName." Where Between(Recno(),gnPageRows*gnPage-(gnPageRows-1),gnPageRows*gnPage) Order By 1
Thisform.Grid1.recordsource="T2"
Thisform.Grid1.DeleteColumn(1) && 如果是VFP6,此句改为:Thisform.Grid1.Columns(1).Width=0
Thisform.Grid1.Refresh
在表单的 Load 事件加代码:
Public gnPage,gnPageRows,gnTableName
*--- 生成测试数据
Create Cursor T1 (ID I,Name C(10),Department C(20))
For m.lnI=1 To 23
Insert Into T1 Values (m.lnI,"XM"+Transform(m.lnI),"BM"+Transform(m.lnI))
Endfor
*---
gnPage=1 && 初始1 表示第一页
gnPageRows=5 && 每页显示记录数
gnTableName="T1" && 分页显示记录的表名
在表单的 Unload 事件加代码:
Release gnPage,gnPageRows,gnTableName
在表单的 Init 事件加代码:
This.Command100.Click()
上一页按钮 的 Click 事件代码:
gnPage=Max(gnPage-1,1)
Thisform.Command100.Click()
下一页按钮 的 Click 事件代码:
gnPage=Min(gnPage+1,Ceiling(Reccount(gnTableName)/gnPageRows))
Thisform.Command100.Click()
Dim AdoCnn As New ADODB.Connection
Dim PageNow As Long
Dim PageMax As Long
Private Sub Command2_Click()
If PageNow < PageMax Then
PageNow = PageNow + 1
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
Else
MsgBox "超出范围"
End If
End Sub
Private Sub Command3_Click()
If PageNow > 1 Then
PageNow = PageNow - 1
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
Else
MsgBox "超出范围"
End If
End Sub
Private Sub Command4_Click()
PageNow = PageMax
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
End Sub
Private Sub Command5_Click()
PageNow = 1
Call MSFGPullFY(MSFG, "select * from rooms", 5, PageNow)
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
End Sub
Private Sub Form_Load()
' On Error GoTo ConnectErr '错误捕捉
Sqluse = "admin"
SqlPwd = "fw"
SqlSre = App.Path & "\Mydb.mdb"
AdoCnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=" & SqlPwd & ";Data Source=" & SqlSre
'设置超时参数
AdoCnn.ConnectionTimeout = 20
AdoCnn.Open
Call MSFGPullFY(MSFG, "select * from rooms", 5, 1)
PageNow = 1
Label1.Caption = "共" & PageMax & "页 当前是第 " & PageNow & " 页"
ConnectErr:
End Sub
'填充指定表单的内容MSFlexG表单名称,MYSQL查询语句,PageSize每页记录数,PageN显示指定页
Public Function MSFGPullFY(MSFlexG As MSFlexGrid, MYSQL As String, PageSize As Integer, PageN As Long)
BooNull = False
Dim Tmpi, Tmpj As Long
'以下部分进行数据表打开操作===========================================
Dim tmpRs As ADODB.Recordset
Set tmpRs = New ADODB.Recordset
tmpRs.Open MYSQL, AdoCnn, adOpenKeyset, adLockReadOnly, adCmdText
'=====================================================================
'如果数据不为空,则进行读取操作=======================================
'数据显示窗口的行数等于记录集记录数加上固定1行(数据名)==============
'数据显示窗口的列数等于记录集表的数据项个数减去需要隐藏的数据项=======
'(固定行默认是记录集中第一个字段)===================================
If tmpRs.BOF And tmpRs.EOF Then
' MsgBox "数据库中无符合条件的记录", , "提示"
MSFlexG.Clear
MSFlexG.Rows = 2
MSFlexG.Cols = 2
Else
tmpRs.PageSize = PageSize
PageMax = tmpRs.PageCount
tmpRs.MoveLast
tmpRs.MoveFirst
MSFlexG.Rows = tmpRs.PageSize + 1
MSFlexG.Cols = tmpRs.PageSize + 1
' If tmpRs.RecordCount > 3000 Then MsgBox "读取数据量较大,请耐心等待", , "提示"
tmpRs.AbsolutePage = PageN
For Tmpi = 1 To tmpRs.PageSize
MSFlexG.TextMatrix(Tmpi, 0) = Str(Tmpi)
For Tmpj = 1 To tmpRs.Fields.Count
If IsNull(Trim(tmpRs.Fields(Tmpj - 1).Value)) Then '控制填充内容不能为空
MSFlexG.TextMatrix(Tmpi, Tmpj) = ""
Else
MSFlexG.TextMatrix(Tmpi, Tmpj) = Trim(tmpRs.Fields(Tmpj - 1).Value)
End If
Next Tmpj
tmpRs.MoveNext
Next Tmpi
tmpRs.Close
Set tmpRs = Nothing
End If
'=====================================================================
MSFlexG.Refresh
End Function