以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  窗口内表格动态添加列很慢,求问原因  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85072)

--  作者:wanlong1215
--  发布时间:2016/5/17 9:58:00
--  窗口内表格动态添加列很慢,求问原因
 前提
1.动态数据源
2.窗口内表类型为SQLTable
3.动态添加列代码为DataTables(tbname).DataCols.add(colname, Gettype(String))
4.开发时使用预览或者窗口命令开窗时速度都可以,整体打开项目时每条DataTables(tbname).DataCols.add(colname, Gettype(String))命令耗时1秒左右


我想在窗口中动态做一张表格,然后加载数据,现在的做法是
1.删除之前的默认数据和默认列
2.动态添加列
3.动态加载数据

如果有什么其他的做法能达到我要是效果也可以

--  作者:大红袍
--  发布时间:2016/5/17 10:01:00
--  

 直接用查询表

 

http://www.foxtable.com/help/topics/0695.htm

 


--  作者:大红袍
--  发布时间:2016/5/17 10:02:00
--  

如果是外部表,这样也可以

 

http://www.foxtable.com/help/topics/1279.htm

 


--  作者:狐狸爸爸
--  发布时间:2016/5/17 10:05:00
--  

我测试,如果在窗口的Afterload事件,只需0.01秒:

Dim  dt As Date = Date.now
DataTables("窗口1_Table1").DataCols.add("列名", Gettype(String))
MessageBox.show((Date.now -dt).Totalseconds)

 

如果做个按钮,在打开窗口后单击按钮增加列,也不过0.02秒。

 

所以也许问题在其他方面,用上面的方法,分析时间到底耗费在什么地方,搞不定就做个例子发上来测试。


--  作者:wanlong1215
--  发布时间:2016/5/17 10:27:00
--  
我在这个新创建表上加了一些事件

比如某列是什么值的时候颜色要标注,当前列变化了要跟着变化等等,所以查询表应该不行吧


现在很尴尬的是工程太大我根本没办法传,然后做测试工程速度都很快,唉

--  作者:大红袍
--  发布时间:2016/5/17 10:30:00
--  

 可以写到全局表事件,然后再创建查询表以后,绑定事件即可啊

 

http://www.foxtable.com/help/topics/0671.htm

 


--  作者:wanlong1215
--  发布时间:2016/5/17 10:31:00
--  
Dim tbname As String = args(0)
Dim colname As String
Dim coltype As Integer

For i As Integer = 1 To Args.Length - 2
    colname = args(i)
    coltype = args(i+1)
    Dim  dt As Date = Date.now
    Select coltype
        Case 1 \'使用String类型
            DataTables(tbname).DataCols.add(colname, Gettype(String))
        Case 2 \'使用Date类型
            DataTables(tbname).DataCols.add(colname, Gettype(Date))
        Case 3 \'使用Integer类型
            DataTables(tbname).DataCols.add(colname, Gettype(Integer))
        Case 4 \'使用备注类型
            DataTables(tbname).DataCols.add(colname, Gettype(String), 255)
    End Select
    i = i + 1

MessageBox.show((Date.now -dt).Totalseconds)
Next




这是我动态添加列的函数


图片点击可在新窗口打开查看图片点击可在新窗口打开查看     这是我的时间打印信息
--  作者:狐狸爸爸
--  发布时间:2016/5/17 10:33:00
--  

如果有事件,可能是因为填充数据的过程中,频繁触发事件导致速度慢,你可以填充过程中暂停事件执行:

http://www.foxtable.com/help/topics/2218.htm

 

这种问题,你要先分析出真正导致速度变慢的代码,才好对症下药,不要凭直觉。
提问的时候,最好贴出完整的代码。

 

另外任何表都可以使用事件,包括零时生成的表:

http://www.foxtable.com/help/topics/0671.htm

 

 

 

[此贴子已经被作者于2016/5/17 10:36:44编辑过]

--  作者:狐狸爸爸
--  发布时间:2016/5/17 10:36:00
--  

如果你要动态增加好多列,0.48秒时正常的时间,这是设计思路问题,不是性能问题。

 

增加列之前可以停止绘制表,会稍微快一些。

DataTables(tbname).StopRedraw

....

DataTables(tbname).ResumeRedraw