以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于目录树的应用 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=193501) |
||||
-- 作者:刘效功天津 -- 发布时间:2024/9/20 14:12:00 -- 关于目录树的应用 专家老师好! 关于同一个表中如何调用不同目录树的应用问题,具体问题描述详见压缩文件中的word文档 和测试文件 代码如下 项目事件 MainTableChangde事件中写入如下代码后,请老师看看问题出在哪儿,请老师赐教 ‘1设置折叠模式和内联筛选树标准代码 Dim st As New InlineTreeSetting() st.ParentCol = "科目编码" st.ChildCol = "项目构成" st.TreeCol = "项目构成"
st.TextCol = "项目构成" st.ValueCol = "合价" st.Unique = False st.SortCol = "sysgrdtreesort" st.AggregateCols = {"合价", "数据调整3" } st.UseStyle = True st.Subtotal = True st.MergeTotal = True st.IncludeSub = False st.GridTree = True st.ExpandTo = -1 ‘2设置在不同主表中启用折叠模式和内联筛选树树代码 Dim bms() As String = {"隐框幕墙单价分析表", "明框幕墙单价分析表"} For Each bm As String In bms
Tables(bm).ShowGridTree(st)
Tables(bm).OpenInlineFilterTree(st) Tables(bm).OpenInlineTree() ‘3 设置三种不同目录树代码
‘目录树1 代码
Dim tb1 As New DropTreeBuilder
tb1.SourceTable = DataTables("材料价格系统")
\'指定目录树表
tb1.TreeSort="材料排序"
tb1.TreeCols = "材料类别|材料类别2|备注" \'指定用于生成目录树的列
tb1.SourceCols = "材料类别|材料类别2|材料名称|单位|单价|备注" \'指定数据来源列
tb1.ReceiveCols = "辅助列1|辅助列2|项目构成|单位|单价|备注" \'指定数据接收列
tb1.TreeWidth = 200
tb1.TreeHeight =1000
‘目录树2 代码
Dim tb2 As New DropTreeBuilder
tb2.SourceTable = DataTables("人工费系统")
\'指定目录树表
tb2.TreeCols = "幕墙形式|幕墙类别|人工费" \'指定用于生成目录树的列
tb2.SourceCols = "幕墙形式|幕墙类别|人工费|单位|单价" \'指定数据来源列
tb2.ReceiveCols = "辅助列1|辅助列2|项目构成|单位|单价" \'指定数据接收列
‘目录树2 代码
Dim tb3 As New DropTreeBuilder
tb3.SourceTable = DataTables("比率") \'指定目录树表
tb3.TreeCols = "类别|名称" \'指定用于生成目录树的列
tb3.SourceCols = "名称|类别|比率系数" \'指定数据来源列 tb3.ReceiveCols = "项目构成|辅助列1|比率系数"\'指定数据接收列 ‘4
切换到主表后,根据科目编码列的文本内容调用不同的目录树代码
If MainTable.Name = bm Then
Dim zfc As String = Tables(bm).Current("科目编码")
If zfc = "材料费" Then ‘目录树1 科目编码为 材料费 的区域 见上面表格
Tables(bm).Cols("项目构成").DropTree =
tb1.Build()
Else If zfc = "人工费" Then ‘目录树2 科目编码为 人工费 的区域 见上面表格
Tables(bm).Cols("项目构成").DropTree =
tb2.Build()
Else If zfc = "机械费" Or zfc = "间接费" Or zfc = "利润" Or zfc =
"税金" Then
‘目录树3 见上面表格
Tables(bm).Cols("项目构成").DropTree =
tb3.Build()
End If
End If Next |
||||
-- 作者:有点蓝 -- 发布时间:2024/9/20 14:28:00 -- 代码改改放到表格BeforeSelChange事件 |
||||
-- 作者:刘效功天津 -- 发布时间:2024/9/20 14:31:00 -- 好的,我试试 谢谢老师 |
||||
-- 作者:刘效功天津 -- 发布时间:2024/9/20 15:14:00 -- 老师好,我试了,出现严重的错误,请老师给测试一下 |
||||
-- 作者:刘效功天津 -- 发布时间:2024/9/20 15:17:00 -- 我把调用目录树的代码放到您说的表事件中,把相应的改了一下,结果连最起码得e参数都出问题,还得老师把代码放到我给您的测试文件中 给测试测试,谢谢老师 |
||||
-- 作者:有点蓝 -- 发布时间:2024/9/20 15:30:00 -- 怎么改的,发上来看看 |
||||
-- 作者:刘效功天津 -- 发布时间:2024/9/20 15:44:00 -- 那些生成折叠模式和内联筛选树的代码如下代码还是写在MainTableChangde事件中 Dim st As New InlineTreeSetting() st.ParentCol = "科目编码" st.ChildCol = "项目构成" st.TreeCol = "项目构成" st.TextCol = "项目构成" st.ValueCol = "合价" st.Unique = False st.SortCol = "sysgrdtreesort" st.AggregateCols = {"合价", "数据调整3" } st.UseStyle = True st.Subtotal = True st.MergeTotal = True st.IncludeSub = False st.GridTree = True st.ExpandTo = -1 ‘2设置在不同主表中启用折叠模式和内联筛选树树代码 Dim bms() As String = {"隐框幕墙单价分析表", "明框幕墙单价分析表"} For Each bm As String In bms
Tables(bm).ShowGridTree(st)
Tables(bm).OpenInlineFilterTree(st) Tables(bm).OpenInlineTree() Next 把下面的目录树生成和调用的代码写在表事件BeforeSelchang事件中 Dim
tb1 As New DropTreeBuilder
tb1.SourceTable = DataTables("材料价格系统") \'指定目录树表
tb1.TreeSort = "材料排序"
tb1.TreeCols = "材料类别|材料类别2|备注" \'指定用于生成目录树的列
tb1.SourceCols = "材料类别|材料类别2|材料名称|单位|单价|备注" \'指定数据来源列
tb1.ReceiveCols = "辅助列1|辅助列2|项目构成|单位|单价|备注" \'指定数据接收列 Dim
tb2 As New DropTreeBuilder
tb2.SourceTable = DataTables("人工费系统") \'指定目录树表
tb2.TreeCols = "幕墙形式|幕墙类别|人工费" \'指定用于生成目录树的列
tb2.SourceCols = "幕墙形式|幕墙类别|人工费|单位|单价" \'指定数据来源列
tb2.ReceiveCols = "辅助列1|辅助列2|项目构成|单位|单价" \'指定数据接收列 Dim
tb3 As New DropTreeBuilder
tb3.SourceTable = DataTables("比率") \'指定目录树表
tb3.TreeCols = "类别|名称" \'指定用于生成目录树的列
tb3.SourceCols = "名称|类别|比率系数" \'指定数据来源列
tb3.ReceiveCols = "项目构成|辅助列1|比率系数"\'指定数据接收列
Dim zfc As String = Tables("隐框幕墙单价分析表").Current("科目编码")
If zfc = "材料费" Then
Tables("隐框幕墙单价分析表").Cols("项目构成").DropTree = tb1.Build()
Else If zfc = "人工费" Then
Tables("隐框幕墙单价分析表").Cols("项目构成").DropTree = tb2.Build()
Else If zfc = "机械费" Or zfc = "间接费" Or zfc = "利润" Or zfc = "税金" Then
Tables("隐框幕墙单价分析表").Cols("项目构成").DropTree = tb3.Build()
End If |
||||
-- 作者:有点蓝 -- 发布时间:2024/9/20 15:48:00 -- 只能说都没有认真的看看BeforeSelChange帮助的说明 |
||||
-- 作者:有点蓝 -- 发布时间:2024/9/20 15:54:00 -- If e.OldRange.RowSel <> e.NewRange.RowSel Then\'如果选择的是不同的行 If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then \'而且原来选择的是一个有效的数据行 Dim r As Row = e.Table.Rows(e.NewRange.Rowsel) \'获得新选择的行 Dim zfc As String = r("科目编码") If zfc = "材料费" Then Dim tb1 As New DropTreeBuilder tb1.SourceTable = DataTables("材料价格系统") \'指定目录树表 tb1.TreeSort = "材料排序" tb1.TreeCols = "材料类别|材料类别2|备注" \'指定用于生成目录树的列 tb1.SourceCols = "材料类别|材料类别2|材料名称|单位|单价|备注" \'指定数据来源列 tb1.ReceiveCols = "辅助列1|辅助列2|项目构成|单位|单价|备注" \'指定数据接收列 e.Table.Cols("项目构成").DropTree = tb1.Build() ElseIf zfc = "人工费" Then Dim tb2 As New DropTreeBuilder tb2.SourceTable = DataTables("人工费系统") \'指定目录树表 tb2.TreeCols = "幕墙形式|幕墙类别|人工费" \'指定用于生成目录树的列 tb2.SourceCols = "幕墙形式|幕墙类别|人工费|单位|单价" \'指定数据来源列 tb2.ReceiveCols = "辅助列1|辅助列2|项目构成|单位|单价" \'指定数据接收列 e.Table.Cols("项目构成").DropTree = tb2.Build() ElseIf zfc = "机械费" Or zfc = "间接费" Or zfc = "利润" Or zfc = "税金" Then Dim tb3 As New DropTreeBuilder tb3.SourceTable = DataTables("比率") \'指定目录树表 tb3.TreeCols = "类别|名称" \'指定用于生成目录树的列 tb3.SourceCols = "名称|类别|比率系数" \'指定数据来源列 tb3.ReceiveCols = "项目构成|辅助列1|比率系数"\'指定数据接收列 e.Table.Cols("项目构成").DropTree = tb3.Build() End If End If End If
|
||||
-- 作者:刘效功天津 -- 发布时间:2024/9/20 15:57:00 -- 是的,老师,您说的对,我仔细看看,请教您一下,那些代码一起写在MainTableChanged事件中,能不能增补点代码,能实现目的码,这样把代码分开写,如果生成目录树的原数据发生改变后,它能自动更新码 |