Foxtable(狐表)用户栏目专家坐堂 → 目录树双击筛选


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

主题:目录树双击筛选

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 0:11:00 [显示全部帖子]

你厉害,别说是筛选2000行,就是加载2000行,也不应该超过0.3秒,你居然整出个10秒来。

这和双击还是单击,没有任何关系的,自己好好找找原因吧,搞不定就做例子传上来。
要善于运用排除法,既然你怀疑双击不行,那就将代码设置在单击事件中,如果效果一样,不就排除了双击的原因吗?

 

下面这个表就是2000行,双击目录树节点筛选,快的时候是0秒,慢的时候是0.015秒,也比你快666倍:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目30.rar

[此贴子已经被作者于2010-12-11 1:17:49编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 10:10:00 [显示全部帖子]

这个文件有关联,父表2000行,子表8000行,筛选一样很快啊: 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目31.rar

 

开发版的狗也支持商业版的foxtable,你将数据导出,用商业版做个例子吧。

既然现在排除了双击和关联的影响,你也可以继续用排除法,逐个删除可能有影响的表事件来测试,看看原因到底在哪,这通常都是因为存在不合理的代码造成的。

[此贴子已经被作者于2010-12-11 10:16:14编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 10:59:00 [显示全部帖子]

1、那就先改为一个字段关联,看看究竟是不是关联的原因,怀疑什么,就去验证什么,不要只停留在猜想阶段。

2、即使用主表的_Identify与子表的ID关联,子表的[产品分类]、[型号]、[规格]一样可以自动输入,甚至连代码也不用写,直接在子表加入三个表达式列,引用父表数据即可。

[此贴子已经被作者于2010-12-11 11:05:25编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 11:53:00 [显示全部帖子]

呵呵,我用多列关联也一样啊:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目31.rar


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 13:14:00 [显示全部帖子]

1、这个问题和窗口、目录树已经是否双击,都没有任何关系,因为你就是在产品表直接通过菜单筛选都是很慢的。

2、将用料表的计算用料和单价两列的表达式删除,筛选即可回到正常速度。

3、你的设计不太好,就这么几个表,居然有这么多关联,而且全是多列关联。

4、意外的一个发现,用料表的PrepareEdit事件为:

 

Dim tb As New DropTreeBuilder
tb.SourceTable = DataTables("材料") '指定目录树表
tb.TreeCols = "材料分类|材料名称|型号规格" '指定用于生成目录树的列
tb.ReceiveCols = "材料分类|材料名称|型号规格" '指定数据接收列
Tables("用料").Cols("材料分类").DropTree = tb.Build() 

 

居然没有进行任何的判断,例如是否是材料分类列,是否是焦点单元格,等于每选择一个单元格就执行一次这样的代码,效率极低,这样的代码最多在MainTableChanged设置即可,而且还要判断一下主表是否是用料表,才予以执行。

[此贴子已经被作者于2010-12-11 13:16:34编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 15:12:00 [显示全部帖子]

1、表达式列并非是必须的,你也可以采用数据列,用代码计算。

2、不明白你的意思,计算或者自动输入和多少个关联字段无关的,不过既然对于性能和使用没有影响,就继续多个字段关联吧。

[此贴子已经被作者于2010-12-11 15:19:46编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 16:31:00 [显示全部帖子]

表A父表,表B子表,表B第二列引用表A第二列数据:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目32.table

注意代码在表A的DataColChanged事件中。

[此贴子已经被作者于2010-12-11 16:33:04编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 17:23:00 [显示全部帖子]

以下是引用实话实说在2010-12-11 16:37:00的发言:

关联字段有三列,第一行代码如何写?

 

是一样的啊,GetChildRows用的是子表名称,和关联列的个数没有关系的。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 17:33:00 [显示全部帖子]

我明白了,要多列数据的话,也很简单。

 

Select Case  e.DataCol.Name
    Case "第二列","第三列","第四列"
     Dim crs As List(of DataRow) = e.DataRow.GetChildRows("表B")  '获得子表中的所有行
     For Each cr As DataRow In crs
        cr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
     Next
End Select


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 19:12:00 [显示全部帖子]

1、删除用料表的计算用料、单价、金额三个表达式列,对应增加三个数据列。
2、注意产品、材料、数量三个表的DataColChanged事件设置有代码。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:产品用料.rar


 回到顶部
总数 13 1 2 下一页