以文本方式查看主题 - 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
如果做个按钮,在打开窗口后单击按钮增加列,也不过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
|