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

摘要:
'=============================================很抱歉之前写的话,但时间不够,所以FlexCell作者没有给我发送加载数据集的几种方法的代码。同时,我要感谢FlexCell作者的好意。如果有人感兴趣,你可以登录我的邮箱,获取FlexCell作者给我的几种加载数据集的方法。FlexCell表格控件是国产产品,非常方便报表开发。在项目开发过程中,您总会遇到将数据集导入FlexCell的情况。不幸的是,VB版本的FlexCell不支持ADO,这是一个遗憾。
 

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

抱歉,一直没有时间,所以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作者给我的几种加载数据集的方法。

免责声明:文章转载自《FlexCell控件初始化以及加载数据集[原创]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android开发技巧——去掉TextView中autolink的下划线Git rebase 使用例子下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

spring的后置处理器——BeanPostProcessor以及spring的生命周期

后置处理器的调用时机 BeanPostProcessor是spring提供的接口,它有两个方法——postProcessBeforeInitialization、postProcessAfterInitialization。关于这两个方法的调用时机,可以参考spring源码注释。 /** * Apply this BeanPostProc...

Android中用文件初始化sqlite 数据库的文(一) (转)

很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据。 这里有2个思路 1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径 2.可以考虑在第一次启动时,执行数据库初始化的sql文件. 方法1: 1.在本地准备...

Java 之 类初始化

一、类初始化过程   1、   2、 二、静态代码块   1、作用     Java静态代码块的作用:Java静态代码块中的代码会在类加载JVM时运行,且只被执行一次,也就是说这些代码不需要实例化类就能够被调用。一般情况下,如果有些代码必须在项目启动的时候就执行的时候,就需要使用静态代码块。    Java静态代码块的用法:一个类可以使用不包含在任何方法体...

flashloader的问题解决过程

1.问题:flashloader无法烧写qspi flash(自行生成的FSBL.out不能烧写,golden FSBL.out可以烧写) 解决过程: 最开始是比对ps_init.c,替换后发现问题并未解决; 然后通过proxxxx_jtag-debug.exe烧写qspi flash判断fsbl load到了0xe8002800 而不是ocm (Prox...

php SWFUpload多文件上传

什么是SWFUpload SWFUpload是一个网站前端文件上传组件。SWFUpload通过flash+JavaScript,实现在不刷新网页的条件下,多个文件批量上传(实际上是逐个上传)、以及显示上传进度。 SWFUpload基本原理 1、传统的html表单文件上传 传统的文件上传是使用下面这种Form的: 1 <formid="file...

iOS性能优化:Instruments使用实战

Instruments使用技巧 关于Instruments官方有一个很有用的用户使用Guide,当然如果不习惯官方英文可以在这里找到中文本翻译版本PDF参阅.Instruments 确实是一个很强大的工具,用它来收集关于一个或多个系统进程的性能和行为的数据极为方便,并能及时跟踪随着时间产生的数据.还可以广泛收集不同类型的数据.关于Instrument工具基...