| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 614 人关注过本帖
标题:关于读取数据并分页显示在表格中的问题,请指教,谢谢!
只看楼主 加入收藏
qinyun
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-6-6
结帖率:20%
收藏
已结贴  问题点数:3 回复次数:9 
关于读取数据并分页显示在表格中的问题,请指教,谢谢!
在网上获得一份读取数据并分页显示在表格中的代码,现在利用在了我的小软件中,我想在他的基础上进行改进,但一直不成功,
目前达到的分页效果是
图片附件: 游客没有浏览图片的权限,请 登录注册


想达到的效果是   就是想加入首页和尾页
  
图片附件: 游客没有浏览图片的权限,请 登录注册


分页.rar (58.43 KB)
搜索更多相关主题的帖子: 软件 网上 
2015-04-21 14:17
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:3 
修改部分,未修改的函数不列出来

Private CN As ADODB.Connection
Private RS As ADODB.Recordset
Private PageCount As Long     '总页数


程序代码:
Private Sub Build_Results(Optional Start_From = 0)
    
On Error GoTo Err_1
    
    Dim LI As ListItem   ' ListItem object
    Dim Temp_Counter As Long
    Dim Last_Page As Long ' 当前记录集的最后一页
    Dim Start_Page As Long '当前记录集的第一页
    Dim X As Long
    
    
    LV_Results.ListItems.Clear
    Temp_Counter = 0
    
    With RS
        If .RecordCount > 0 Then
            .Move Start_From * 13, 1
        End If
        
        
        Do While Not .EOF And Temp_Counter < 13
           ' DoEvents
            Set LI = LV_Results.ListItems.Add(, "K" & !Cur_ID, !Cur_Name)
            LI.SubItems(1) = !Country_Name
            LI.SubItems(2) = IIf(IsNull(!Alpha2_Code) = True, " ", !Alpha2_Code)
            LI.SubItems(3) = IIf(IsNull(!Currency_CodeA) = True, " ", !Currency_CodeA)
            LI.SubItems(4) = IIf(IsNull(!Currency_CodeN) = True, " ", !Currency_CodeN)
            .MoveNext
            Temp_Counter = Temp_Counter + 1
        Loop
        
        T_Results.Caption = CStr(.RecordCount)
        
        ' 计算显示的记录数
        If .RecordCount > 0 Then
            T_Showing_Records.Caption = (Start_From * 13) + 1 & " - "
            If (Start_From * 13) + 1 + 13 >= .RecordCount Then
                T_Showing_Records.Caption = T_Showing_Records.Caption & .RecordCount
            Else
                T_Showing_Records.Caption = T_Showing_Records.Caption & (Start_From * 13) + 13
            End If
        Else
            T_Showing_Records.Caption = "0"
        End If

        
        
        ' 删除原来的记录导航显示
        For T = 1 To T_Page.Count - 1
            Unload T_Page(T)
        Next
            
        ' 获得最后一页
        If .RecordCount Mod 13 > 0 Then
            Last_Page = Int(.RecordCount / 13) + 1
        Else
            Last_Page = Int(.RecordCount / 13)
        End If
        PageCount = Last_Page              '保存总页数,尾页需要使用
   
        '获得要显示的第一页记录
        For y = 1 To Last_Page Step 10
            If Start_From + 1 >= y And Start_From + 1 <= y + 9 Then
                Exit For
            End If
        Next
   
        Start_Page = y
        X = 1
            
        ' If we are showing pages not from first 20... <<- [ Previous ]
        If y > 1 Then
            '加载首页,并放到 <<- 之前
            Load T_Page(T_Page.Count)
            T_Page(T_Page.Count - 1).Caption = "首页"
            T_Page(T_Page.Count - 1).Left = T_Page(T_Page.Count - 2).Left + T_Page(T_Page.Count - 2).Width + 90
            T_Page(T_Page.Count - 1).Top = T_Page(T_Page.Count - 2).Top
            T_Page(T_Page.Count - 1).Visible = True
            
            Load T_Page(T_Page.Count)
            T_Page(T_Page.Count - 1).Caption = "<<-"
            T_Page(T_Page.Count - 1).Left = T_Page(T_Page.Count - 2).Left + T_Page(T_Page.Count - 2).Width + 90
            T_Page(T_Page.Count - 1).Top = T_Page(T_Page.Count - 2).Top
            T_Page(T_Page.Count - 1).Visible = True
        End If
            
        For T = Start_Page To Last_Page
            Load T_Page(T_Page.Count)
            If X > 10 Then ' If there are more pages then we can show... ->> [ Next ]
          
                T_Page(T_Page.Count - 1).Caption = "->>"
                T_Page(T_Page.Count - 1).Left = T_Page(T_Page.Count - 2).Left + T_Page(T_Page.Count - 2).Width + 90
                T_Page(T_Page.Count - 1).Top = T_Page(T_Page.Count - 2).Top
                T_Page(T_Page.Count - 1).Visible = True
                
                '加载尾页,并放到 ->> 之后
                Load T_Page(T_Page.Count)
                T_Page(T_Page.Count - 1).Caption = "尾页"
                T_Page(T_Page.Count - 1).Left = T_Page(T_Page.Count - 2).Left + T_Page(T_Page.Count - 2).Width + 90
                T_Page(T_Page.Count - 1).Top = T_Page(T_Page.Count - 2).Top
                T_Page(T_Page.Count - 1).Visible = True
                
                Exit For
            Else
                T_Page(T_Page.Count - 1).Caption = CStr(T)
                T_Page(T_Page.Count - 1).Left = T_Page(T_Page.Count - 2).Left + T_Page(T_Page.Count - 2).Width + 90
                T_Page(T_Page.Count - 1).Top = T_Page(T_Page.Count - 2).Top
                If T = Start_From + 1 Then ' If this is a current page
                    T_Page(T_Page.Count - 1).ForeColor = &HFF&
                End If
                T_Page(T_Page.Count - 1).Visible = True
            End If
            X = X + 1
        Next
    End With
    
    
Exit_Sub:
   Exit Sub
    
Err_1:
    MsgBox Err.Description, vbOKOnly + vbCritical + vbApplicationModal, "StaCS : System error # " & Err.Number
    Resume Exit_Sub
    
End Sub

Private Sub T_Page_Click(Index As Integer)
    
On Error GoTo Err_1
    

    Me.AutoRedraw = False    'AutoRedraw 就是控制是否自动重绘的属性
    
    Select Case T_Page(Index).Caption
        Case "->>"
            Call Build_Results(Val(T_Page(Index - 1).Caption))
        Case "<<-"
            Call Build_Results(Val(T_Page(Index + 1).Caption) - 2)
        Case "首页"
            Call Build_Results(0)            
        Case "尾页"
            Call Build_Results(PageCount - 1)
        Case Else
            Call Build_Results(Val(T_Page(Index).Caption) - 1)
    End Select
            
'    都是对一个值进行判断,改用多分支选择。原代码注释掉    
'    If T_Page(Index).Caption = "->>" Then  '自动生成的页码
'            Call Build_Results(Val(T_Page(Index - 1).Caption))
'    ElseIf T_Page(Index).Caption = "<<-" Then
'        Call Build_Results(Val(T_Page(Index + 1).Caption) - 2)
'    Else
'        Call Build_Results(Val(T_Page(Index).Caption) - 1)
'    End If
    
    Me.AutoRedraw = True
Exit_Sub:
   Exit Sub
    
Err_1:
    Resume Exit_Sub
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-21 14:35
qinyun
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-6-6
收藏
得分:0 
那再麻烦一下,如何在前后加入上一页和下一页呢
2015-04-21 16:57
qinyun
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-6-6
收藏
得分:0 
程序代码:
Select Case T_Page(Index).Caption
        Case "->>"
            Call Build_Results(Val(T_Page(Index - 1).Caption))
        Case "<<-"
            Call Build_Results(Val(T_Page(Index + 1).Caption) - 2)
        Case "首页"
            Call Build_Results(0)
        Case "尾页"
            Call Build_Results(PageCount - 1)
        Case "上一页"
       
        Case "下一页"
       
        Case Else
            Call Build_Results(Val(T_Page(Index).Caption) - 1)
End Select


[ 本帖最后由 qinyun 于 2015-4-21 17:01 编辑 ]
2015-04-21 17:00
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
前一页,下一页,需要保存当前页码,然后根据当前页码还调用前一页和后一页。

在手机上,无法改代码

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-21 19:24
qinyun
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-6-6
收藏
得分:0 
回复 5楼 风吹过b
我试了一下,因数涉及到数组问题,我一点都不懂这块的,所以没成功,希望有时间帮修改一下谢谢
2015-04-21 20:51
qinyun
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-6-6
收藏
得分:0 
以下是引用风吹过b在2015-4-21 19:24:30的发言:

前一页,下一页,需要保存当前页码,然后根据当前页码还调用前一页和后一页。
 
在手机上,无法改代码
我试了一晚上,因数涉及到数组问题,怎么弄都没成功,希望再指教谢谢
2015-04-22 11:38
qinyun
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-6-6
收藏
得分:0 
风哥,帮忙看下吧!急等中啊!急呀!
2015-04-22 12:25
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
程序代码:
Private CN As ADODB.Connection
Private RS As ADODB.Recordset

Private PageCount As Long           '总页数
Private Page As Long                '当前页数


程序代码:
Private Sub Build_Results(Optional Start_From As Long = 1)
    
On Error GoTo Err_1
    
    Dim LI As ListItem   ' ListItem object
    Dim Temp_Counter As Long
    Dim Last_Page As Long ' 当前记录集的最后一页
    Dim Start_Page As Long '当前记录集的第一页
    
    LV_Results.ListItems.Clear
    Temp_Counter = 0
    
    With RS
        .PageSize = 13                      '设置每页大小
        PageCount = .PageCount
        If .PageCount >= Start_From And Start_From > 0 Then         '传递的页码有效
            Page = Start_From               '保存当前页码
            .AbsolutePage = Page            '翻页
        Else
            Page = 1                        '页码无效,忽略,从第1页
            .AbsolutePage = Page            '翻页
        End If
        
        '显示记录
        Do While Not .EOF And Temp_Counter < 13
           ' DoEvents
            Set LI = LV_Results.ListItems.Add(, "K" & !Cur_ID, !Cur_Name)
            LI.SubItems(1) = !Country_Name
            LI.SubItems(2) = IIf(IsNull(!Alpha2_Code) = True, " ", !Alpha2_Code)
            LI.SubItems(3) = IIf(IsNull(!Currency_CodeA) = True, " ", !Currency_CodeA)
            LI.SubItems(4) = IIf(IsNull(!Currency_CodeN) = True, " ", !Currency_CodeN)
            .MoveNext
            Temp_Counter = Temp_Counter + 1
        Loop
        
        T_Results.Caption = CStr(.RecordCount)
        
        ' 计算显示的记录数
        If .RecordCount > 0 Then
            If (Page) * 13 > .RecordCount Then           '如果是最后一页
                T_Showing_Records.Caption = (Page - 1) * 13 + 1 & " - " & .RecordCount & "  共:" & .PageCount & ""
            Else
                T_Showing_Records.Caption = (Page - 1) * 13 + 1 & " - " & Page * 13 & "  共:" & .PageCount & ""
            End If
        Else
            T_Showing_Records.Caption = "0"
        End If
        
        
        ' 删除原来的记录导航显示
        For T = 1 To T_Page.Count - 1
            Unload T_Page(T)
        Next
        
        If Int(Page / 10) * 10 = Page Then   '10的整数倍
            Start_Page = Int(Page / 10 - 1) * 10 + 1           '首页
        Else
            Start_Page = Int(Page / 10) * 10 + 1           '首页
        End If
        
        If Start_Page + 10 > PageCount Then         '尾页
            Last_Page = PageCount
        Else
            Last_Page = Start_Page + 9
        End If
        
        If Start_Page > 10 Then                     '当前页超过了第一屏
            Call loadTPage("首页", False)           '重复代码定义为过程调用
            Call loadTPage("<<-", False)
        End If
        
        If Page > 1 Then
            Call loadTPage("前一页", False)
        End If
        
        For T = Start_Page To Last_Page
            Call loadTPage(CStr(T), T = Page)
        Next T
        
        If Page <> PageCount Then
            Call loadTPage("后一页", False)
        End If
        
        If Start_Page + 10 < PageCount Then                   '当前页与最后一页差一屏
            Call loadTPage("->>", False)
            Call loadTPage("尾页", False)
        End If
    End With
    
    
Exit_Sub:
   Exit Sub
    
Err_1:
    MsgBox Err.Description, vbOKOnly + vbCritical + vbApplicationModal, "StaCS : System error # " & Err.Number
    Resume Exit_Sub
    
End Sub

Private Sub T_Page_Click(Index As Integer)
    
On Error GoTo Err_1
    

    Me.AutoRedraw = False    'AutoRedraw 就是控制是否自动重绘的属性
    
    Select Case T_Page(Index).Caption
        Case "->>"
            Call Build_Results(Page + 10)               '翻10页
'           '这是另一种翻法
'            If Int(Page / 10) * 10 = Page Then
'                Call Build_Results(Int(Page / 10) * 10 + 1)
'            Else
'                Call Build_Results(Int(Page / 10 + 1) * 10 + 1)
'            End If
        Case "<<-"
            Call Build_Results(Page - 10)
'           '这是另一种翻法
'            If Int(Page / 10) * 10 = Page Then
'                Call Build_Results(Int(Page / 10 - 2) * 10 + 1)
'            Else
'                Call Build_Results(Int(Page / 10 - 1) * 10 + 1)
'            End If
                
        Case "首页"
            Call Build_Results(1)
            
        Case "尾页"
            Call Build_Results(PageCount)
        Case "前一页"
            Call Build_Results(Page - 1)
        Case "后一页"
            Call Build_Results(Page + 1)
        Case Else
            Call Build_Results(Val(T_Page(Index).Caption))
    End Select
   
    Me.AutoRedraw = True
Exit_Sub:
   Exit Sub
    
Err_1:
    Resume Exit_Sub
End Sub


Public Sub loadTPage(T As String, Optional RedTF As Boolean = False)
'代码重复很多,所以定义为过程
    Load T_Page(T_Page.Count)
    T_Page(T_Page.Count - 1).Caption = T
    T_Page(T_Page.Count - 1).Left = T_Page(T_Page.Count - 2).Left + T_Page(T_Page.Count - 2).Width + 90
    T_Page(T_Page.Count - 1).Top = T_Page(0).Top
    T_Page(T_Page.Count - 1).Visible = True
    If RedTF Then                    '如果是指定的页,改红色
        T_Page(T_Page.Count - 1).ForeColor = &HFF&
    End If
End Sub


除下显示部分外,翻页处理,页码计算,按钮,全部重写过了。
收到的鲜花
  • qinyun2015-05-01 21:00 送鲜花  3朵   附言:感谢风哥利用午休时间帮我解决问题!谢谢!

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-22 13:35
qinyun
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-6-6
收藏
得分:0 
感谢风哥利用午休时间帮我解决问题!谢谢!
2015-04-22 13:58
快速回复:关于读取数据并分页显示在表格中的问题,请指教,谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096177 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved