FlexCell控件初始化以及加载数据集[原创]

 

'================================写在之前的话

抱歉,一直没有时间,所以FlexCell作者给我的几种加载数据集方法的代码一直没有发出来。

同时再次感谢FlexCell作者的厚道。

博客上发代码有点困难。如果有人有兴趣的话可以登录我的邮箱去获取FlexCell作者给我的几种加载数据集的方法。

邮箱地址:getsoft@126.com         密码:tianxingjian_01

为了方便大家记忆,密码就是:天行健_01

再次严重声明我不是打广告的,如果我是打广告的,我的小鸡鸡被狗啃掉。

'=============================下面是原帖。

FlexCell表格控件是国货,用于报表开发十分方便。上句话不是广告。第二句话是实话。

项目开发过程中总是会遇到将数据集导入到FlexCell中的情况,可惜的是FlexCell的VB版不支持ADO,可惜呀可惜呀。

自己写了个通用模块,压力测试了一下,不太好使,速度奇慢无比,但不会出错。见以下代码块1。

'代码块1
Public Function loadRecord(GD As Grid, rs As ADODB.Recordset, _
intFirstCol As Integer, intadJust As Integer, _
Optional FC As Integer, Optional FR As Integer) As Boolean
'FC 冻结列
'FR 冻结行
Dim FiledCount As Integer
Dim RsCount As Integer
Dim i As Integer
Dim j As Integer
Dim strComand As String
On Error GoTo Emsg

loadRecord = False
FiledCount = rs.Fields.Count '记录集列数
RsCount = rs.RecordCount        '记录集行数
With GD                      '初始化FelxCell格式并加载数据集
       .selectionMode = 1       '选择模式为行选择,我习惯这个,各位可以自行修改
       For i = 1 To .Rows
         .RemoveItem (i)       '删除所有内容
       Next

       .BackColor1 = RGB(231, 235, 247) '初始化奇数行的颜色
       .BackColor2 = RGB(239, 243, 255) '初始化偶数行的颜色,
       .Cols = FiledCount + 1              '表格列数等于记录集列数+1
       .AllowUserResizing = True           '设置用户可以改变行宽列宽
       .BoldFixedCell = False              '返回或设置是否在固定行/列上以粗体画出Selection所对应的单元格的文字
       .DisplayFocusRect = False           '返回或设置控件在当前活动单元格是否显示一个虚框。
       .ExtendLastCol = True             '返回或设置是否扩展最后一列的列宽,让表格可以充满控件
       .Appearance = Flat                '表格绘制风格
       .FixedRowColStyle = Flat          '固定行/列的样式
       .ScrollBarStyle = Flat              '滚动条样式
       .DefaultFont.Name = "Tahoma"        '字体样式
       .DefaultFont.Size = 8             '字体大小
       .Column(0).Width = intFirstCol    '设置第一列宽度
       .Cell(0, 0).Text = ""             '以上都是初始化整个表格样式的,大家可以自己选择,也可以都用默认样式
       For i = 1 To .Cols - 1              '初始化表头
         .Cell(0, i).Text = rs.Fields.Item(i - 1).Name '表头内容
         .Column(i).Width = intadJust                '表头宽度
       Next
       If rs.EOF Then                   '如果记录集为空则退出函数
         loadRecord = True
         Exit Function
       End If
       '如果不为空加载记录集
       .AutoRedraw = False '禁止重绘,这样速度快
       .Rows = 1
       .Refresh
       For i = 1 To RsCount        '记录集个数
      
         For j = 1 To FiledCount '记录集列个数
                                 '得到加载内容命令
            If j = FiledCount Then
                   strComand = strComand & rs.Fields(j - 1)
            Else
                   strComand = strComand & rs.Fields(j - 1) & Chr(9)
            End If
            
         Next

         .AddItem strComand, False '执行加载命令,不重绘
       Next i
      
       .AutoRedraw = True
       .Refresh
       .FrozenCols = FC
       .FrozenRows = FR
End With
loadRecord = True
Exit Function
Emsg:
MsgBox Err.Description, vbInformation, "系统提示"
End Function

拿上面的代码到VBGOOD上本来想臭美一下,结果一兄弟马上发了一个速度较快的,压力测试了一下,效率是我的好几倍。不敢独享拿出来吧,见以下代码二,代码二的速度还好,但如果某一记录集的值包含chr(13)也就是回车符则会出现串行问题:

'代码二

Public Sub GetSql(gd As Grid, ResOfGdl As ADODB.Recordset, intFirstCol As Integer, _
                    Optional FC As Integer, _
                    Optional FR As Integer)
    On Error GoTo ED
    Dim I As Integer, Tmp() As String
    With gd
            .SelectionMode = 1          '选择模式为行选择,我习惯这个,各位可以自行修改
        For I = 1 To .Rows
            .RemoveItem (I)         '删除所有内容
        Next
        
        .BackColor1 = RGB(231, 235, 247)    '初始化奇数行的颜色
        .BackColor2 = RGB(239, 243, 255)    '初始化偶数行的颜色,
        .Cols = ResOfGdl.RecordCount + 1               '表格列数等于记录集列数+1
        .AllowUserResizing = True           '设置用户可以改变行宽列宽
        .BoldFixedCell = False              '返回或设置是否在固定行/列上以粗体画出Selection所对应的单元格的文字
        .DisplayFocusRect = False           '返回或设置控件在当前活动单元格是否显示一个虚框。
        .ExtendLastCol = True               '返回或设置是否扩展最后一列的列宽,让表格可以充满控件
        .Appearance = Flat                  '表格绘制风格
        .FixedRowColStyle = Flat            '固定行/列的样式
        .ScrollBarStyle = Flat              '滚动条样式
        .DefaultFont.Name = "Tahoma"        '字体样式
        .DefaultFont.Size = 8               '字体大小
        .Column(0).Width = intFirstCol      '设置第一列宽度
        .Cell(0, 0).Text = ""               '以上都是初始化整个表格样式的,大家可以自己选择,也可以都用默认样式

    .AutoRedraw = False
    .Rows = 1
    .Rows = 1
    .Cols = ResOfGdl.Fields.Count + 1

    For I = 0 To ResOfGdl.Fields.Count - 1
        .Cell(0, I + 1).Text = ResOfGdl.Fields(I).Name
    Next

    If ResOfGdl.RecordCount = 0 Then GoTo ED

'========================关键是这一段,原来ADO的数据集还可以这样呀。
    Tmp = Split(ResOfGdl.GetString(adClipString), Chr$(13))

    For I = 0 To UBound(Tmp) - 1
        .AddItem Tmp(I), False
    Next
    End With
ED:
    gd.AutoRedraw = True
    gd.Refresh
If Err.Number <> 0 Then MsgBox Err.Description & Err.Number, , Err.Source

End Sub

跟FlexCell的技术支持邮件联系了一下,要了几个速度快,也没有错误的方法,其中虚表方法速度最快。

'==========================================

抱歉,一直没有时间,所以FlexCell作者给我的几种加载数据集方法的代码一直没有发出来。

同时再次感谢FlexCell作者的后道。

博客上发代码有点困难。如果有人有兴趣的话可以登录我的邮箱去获取FlexCell作者给我的几种加载数据集的方法。

posted @ 2011-12-20 10:16  辣椒粉  阅读(2161)  评论(6编辑  收藏  举报