以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  动态目录树 求助  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=140492)

--  作者:yifan3429
--  发布时间:2019/9/6 18:30:00
--  动态目录树 求助

代码放在

PrepareEdit

准备编辑单元格的时候执行。


外部数据源 希望从后台获取数据
筛选出逻辑 启用列 为是的行作为目录树列表
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELEC T DIS TINCT 大类,一级科目,明细科目 From {会计科目} Where 启用 = 1"

dt = cmd.ExecuteReader()
\'生成目录树
Dim tb As New DropTreeBuilder
tb.SourceTable = DataTables("会计科目") \'指定目录树表
tb.TreeCols = "大类|一级科目|明细科目" \'指定用于生成目录树的列
tb.SourceCols = "一级科目|明细科目" \'指定数据来源列
tb.ReceiveCols = "一级科目|明细科目" \'指定数据接收列
Tables("凭证明细").Cols("会计科目_一级科目").DropTree = tb.Build()


---------------------------
错误
在将 nvarchar 值 \'启用\' 转换成数据类型 int 时失败。


替换下图设置
图片点击可在新窗口打开查看此主题相关图片如下:企业微信截图_20190906182919.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2019/9/6 18:57:34编辑过]

--  作者:有点蓝
--  发布时间:2019/9/6 20:19:00
--  
PrepareEdit不适合使用这种用法,会导致项目假死,只能放到maintablechanged事件

...Where 启用 = \'1\'"

--  作者:yifan3429
--  发布时间:2019/9/7 9:29:00
--  
如何让目录树的字体变得大点
--  作者:有点蓝
--  发布时间:2019/9/7 9:39:00
--  
这个无法控制。除非自己使用下拉窗口做,如:http://www.foxtable.com/webhelp/topics/2893.htm
--  作者:yifan3429
--  发布时间:2019/9/7 10:17:00
--  
If MainTable.Name = "凭证明细" Then \'如果选择的主表是订单表
\'生成数据表
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELEC T DIS TINCT 大类,一级科目,明细科目 From {会计科目} Where 启用 = \'1\'"
dt = cmd.ExecuteReader()
\'生成目录树
Dim tb As New DropTreeBuilder
tb.SourceTable = DataTables("会计科目") \'指定目录树表
tb.TreeCols = "大类|一级科目|明细科目" \'指定用于生成目录树的列
tb.SourceCols = "大类|一级科目|明细科目" \'指定数据来源
tb.ReceiveCols = "大类|会计科目_一级科目|会计科目_明细科目" \'指定数据接收列
Tables("凭证明细").Cols("会计科目_一级科目").DropTree = tb.Build()
End If


上面的代码应该是从后台获取数据
实际上不能,只有下拉框架没有数据
我如果将数据  会计科目  全部加载后是可以的
找不到原因了


--  作者:有点蓝
--  发布时间:2019/9/7 10:41:00
--  
tb.SourceTable = dt \'指定目录树表
--  作者:yifan3429
--  发布时间:2019/9/7 12:46:00
--  
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELE CT DIST INCT 大类,一级科目,明细科目 From {会计科目} Where 启用 = \'1\'"
dt = cmd.ExecuteReader()
\'生成目录树
Dim tb As New DropTreeBuilder
tb.SourceTable = dt
tb.TreeCols = "大类|一级科目|明细科目" \'指定用于生成目录树的列
tb.SourceCols = "大类|一级科目|明细科目" \'指定数据来源
tb.ReceiveCols = "大类|会计科目_一级科目|会计科目_明细科目" \'指定数据接收列
Tables("凭证明细").Cols("会计科目_一级科目").DropTree = tb.Build()


还是不能用,只有框架没有数据
换回 \'tb.SourceTable = DataTables("会计科目") \'指定目录树表
加载数据后正常
不得其解  求助

--  作者:有点蓝
--  发布时间:2019/9/7 14:16:00
--  
11
[此贴子已经被作者于2019/9/7 16:33:30编辑过]

--  作者:yifan3429
--  发布时间:2019/9/7 16:26:00
--  
本页地址:http://www.foxtable.com/webhelp/topics/0696.htm

示例二

同样有了ExecuteReader,就可以直接利用后台数据给列生成下拉目录树:

\'生成数据表
Dim 
cmd As New SQLCommand
Dim
 dt As DataTable
cmd.ConnectionName = 
"region"
cmd.CommandText = 
"SELE CT DIS TINCT 省,市县,区号,邮编 From {行政区域}"
dt = cmd.ExecuteReader()

\'生成目录树

Dim
 tb As New DropTreeBuilder
tb.SourceTable = dt
tb.TreeCols = 
"省|市县"
tb.SourceCols = "省|市县|区号|邮编" 
tb.ReceiveCols = 
"省|市县|区号|邮编"
Tables(
"客户").Cols("省").DropTree = tb.Build()


代码放在哪呢

那个这个怎么实现呢



[此贴子已经被作者于2019/9/7 16:26:36编辑过]

--  作者:有点蓝
--  发布时间:2019/9/7 16:30:00
--  
汗,测试了一下,没有问题啊。上传您的实例说明