以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于目录树的应用  (http://foxtable.net/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 = "项目构成"

 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:关于目录树的应用.zip

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事件中,能不能增补点代码,能实现目的码,这样把代码分开写,如果生成目录树的原数据发生改变后,它能自动更新码