Foxtable(狐表)用户栏目专家坐堂 → 关于目录树的应用


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

主题:关于目录树的应用

帅哥哟,离线,有人找我吗?
刘效功天津
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:97 积分:685 威望:0 精华:0 注册:2023/9/19 11:27:00
关于目录树的应用  发帖心情 Post By: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



 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/9/20 14:28:00 [只看该作者]

代码改改放到表格BeforeSelChange事件

 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:97 积分:685 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/9/20 14:31:00 [只看该作者]

好的,我试试
谢谢老师


 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:97 积分:685 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/9/20 15:14:00 [只看该作者]

老师好,我试了,出现严重的错误,请老师给测试一下

 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:97 积分:685 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/9/20 15:17:00 [只看该作者]

我把调用目录树的代码放到您说的表事件中,把相应的改了一下,结果连最起码得e参数都出问题,还得老师把代码放到我给您的测试文件中  给测试测试,谢谢老师


 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/9/20 15:30:00 [只看该作者]

怎么改的,发上来看看

 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:97 积分:685 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By: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


 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/9/20 15:48:00 [只看该作者]

只能说都没有认真的看看BeforeSelChange帮助的说明

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
刘效功天津
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:97 积分:685 威望:0 精华:0 注册:2023/9/19 11:27:00
  发帖心情 Post By:2024/9/20 15:57:00 [只看该作者]

是的,老师,您说的对,我仔细看看,请教您一下,那些代码一起写在MainTableChanged事件中,能不能增补点代码,能实现目的码,这样把代码分开写,如果生成目录树的原数据发生改变后,它能自动更新码


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