Foxtable(狐表)用户栏目专家坐堂 → C1FlexGrid生成效率问题


  共有2838人关注过本帖树形打印复制链接

主题:C1FlexGrid生成效率问题

帅哥哟,离线,有人找我吗?
rjh4078
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3361 积分:24802 威望:0 精华:0 注册:2012/3/26 21:47:00
C1FlexGrid生成效率问题  发帖心情 Post By:2018/8/21 12:42:00 [只看该作者]

Dim t As Table=Tables("生产计划单_t4")
t.Fill("sel ect 订单号 from {计划明细} where [_Identify]=0",Functions.Execute("返回数据源"),True)
TblBase = t.Grid
t.StopRedraw
With TblBase
    '' .Font = New Font("微软雅黑",9)
    .SubtotalPosition = C1FlexGrid.SubtotalPositionEnum.AboveData
    .AllowFreezing = C1FlexGrid.AllowFreezingEnum.None
    .AllowResizing = C1FlexGrid.AllowResizingEnum.Columns
    .VisualStyle = C1FlexGrid.VisualStyle.System
    .Tree.Column = 1
    .Tree.LineStyle = Drawing2D.DashStyle.Dash
    .Tree.Style = C1FlexGrid.TreeStyleFlags.CompleteLeaf
    ' .Tree.NodeImageCollapsed = GetImage("0.png")
    ' .Tree.NodeImageExpanded = GetImage("1.png")
    .Cols(0).AllowResizing = False
    .Cols(0).TextAlign = C1FlexGrid.TextAlignEnum.CenterCenter
End With
t.DataTable.DataRows.Clear

With Tables("生产计划单")
    If .current IsNot Nothing Then
        Dim Node As C1FlexGrid.Node
        Dim s As String
        Dim cl As String
        
            For Each r As DataRow In DataTables("计划明细").Select("计划单号='" & .current("计划单号") & "'","排程顺序,级码")                
                    If r("级码").split(".").length=1 Then
                        Node = TblBase.Rows.InsertNode(TblBase.Rows.Count, 0)
                        For Each c As Col In Tables("计划明细").Cols
                            If t.DataTable.DataCols.Contains(c.name)=False Then
                                t.DataTable.DataCols.add(c.name,Gettype(String),255)
                            End If
                            node.Row(c.name)=r(c.name)
                        Next
                    Else
                        If r("订单号")=node.Row("订单号") Then
                            Node = TblBase.Rows.InsertNode(TblBase.Rows.Count, 1)
                            For Each c As Col In Tables("计划明细").Cols
                                If t.DataTable.DataCols.Contains(c.name)=False Then
                                    t.DataTable.DataCols.add(c.name,Gettype(String),255)
                                End If
                                node.Row(c.name)=r(c.name)
                            Next
                        End If
                    End If
                    '' Functions.Execute("loop", node)
                           
        Next
        
        
    End If
End With


vars("展开")=1

t.Cols(t.Cols(0).name).Width=120
t.ResumeRedraw


这是生成C1FlexGrid目录树表的代码  如果数据超过5行就已经非常卡了 30行简直要命  有什么优化方法,这个树只有2层,是固定的,根据级码和订单号进行父子关联

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/21 13:50:00 [只看该作者]

暂时没有时间去研究这个C1FlexGrid底层的应用。可以上传一个实例,有空测试一下。

卡是指展开收起目录树?还是指录入时?表格还有没有其他表事件?

上面代码唯一的缺陷是没有必要在外层for循环里判断和添加列,拿出来单独执行一次就可以了。其他地方看不出会导致卡



 回到顶部
帅哥哟,离线,有人找我吗?
rjh4078
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3361 积分:24802 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2018/8/21 16:23:00 [只看该作者]

卡是指生成目录树的时候 根据数据量有3-10秒的卡顿

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/21 16:28:00 [只看该作者]

判断和添加列的代码,拿出来单独执行一次。

 回到顶部
帅哥哟,离线,有人找我吗?
rjh4078
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3361 积分:24802 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2018/8/22 7:59:00 [只看该作者]

With Tables("生产计划单")
    If .current IsNot Nothing Then
        Dim Node As C1FlexGrid.Node
        Dim s As String
        Dim cl As String
        For Each c As Col In Tables("计划明细").Cols
                            If t.DataTable.DataCols.Contains(c.name)=False Then
                                t.DataTable.DataCols.add(c.name,Gettype(String),255)
                            End If
            For Each r As DataRow In DataTables("计划明细").Select("计划单号='" & .current("计划单号") & "'","排程顺序,级码")                
                    If r("级码").split(".").length=1 Then
                        Node = TblBase.Rows.InsertNode(TblBase.Rows.Count, 0)                        
                            node.Row(c.name)=r(c.name)
                        Next
                    Else
                        If r("订单号")=node.Row("订单号") Then
                            Node = TblBase.Rows.InsertNode(TblBase.Rows.Count, 1)                           
                                node.Row(c.name)=r(c.name)
                            Next
                        End If
                    End If
                    
                           
        Next
        
        
    End If
End With
改成这样 还是没有改善

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/22 8:42:00 [只看该作者]

上实例测试

 回到顶部