Foxtable(狐表)用户栏目专家坐堂 → 老师您好,如何通过目录树的复选组合,合成对应的组合表


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

主题:老师您好,如何通过目录树的复选组合,合成对应的组合表

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


加好友 发短信
等级:童狐 帖子:200 积分:1997 威望:0 精华:0 注册:2018/3/30 19:56:00
老师您好,如何通过目录树的复选组合,合成对应的组合表  发帖心情 Post By:2019/4/28 22:43:00 [只看该作者]

老师您好,想要实现这么一个功能,不知道怎么编程。

左侧开启复选框的目录树的窗口,然后选择不同的复选框,可以形成按照选择顺序依次组合数据,最后形成一个数据表


图片点击可在新窗口打开查看此主题相关图片如下:求助排序组合问题.bmp
图片点击可在新窗口打开查看

 

 

这种情况类似于标书的制作,分别把标书的各个部分的数据录入表中,分配相应的归类,然后根据归类生成目录树,目录树开启复选框之后,通过选择复选框来组合不同的内容,内容组合的顺序按照选择的顺序进行。查了好多帮助,不知道怎么能实现这种根据复选框的选择顺序来排列数据的方法

 

 

我尝试了各种组合,但是因为某种原因,导致最后生成的表顺序乱了

求大神指导一二

谢谢

[此贴子已经被作者于2019/4/29 10:02:10编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/29 10:49:00 [只看该作者]

1、勾选目录树的时候,用vars全局变量记录你勾选的先后顺序。

 

2、表格加入一个排序列,勾选目录树的时候,给排序列赋值。

 

3、最后根据排序列排序显示结果。


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


加好友 发短信
等级:童狐 帖子:200 积分:1997 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2019/4/29 16:26:00 [只看该作者]

老师您好,谢谢您的帮助。根据刚才的设想,我借助帮助文件写了一下代码

1.设置全局变量 Vars("qorder") = 1 ,存放选择目录树的顺序

2.表中增加“排序列“

3.排序类赋值 Vars("flag") =100 00 00 000

'以下代码放在目录树的afterchecknode 事件中
Dim Tablename = "报价专用"  '定义统计表
Dim nms As String() = {"项目代号","总吨","Joblevel1"} '指定生成目录树的各列
Dim qts As String() = {"'","'","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
'记得字符列用单引号,日期列用符号#,数值列则不需要指定符号,例如上面的折扣列.
Dim trv As WinForm.TreeView = e.Sender
Dim flt As String

Dim nd As WinForm.TreeNode
For Each nd In e.node.allNodes '清除子节点的选中标记
    nd.Checked = False
Next
nd = e.Node.ParentNode

 

Do While nd IsNot Nothing '清除父节点的选中标记
    nd.Checked = False
    nd = nd.ParentNode
Loop


'messagebox.show("此处开始循环","注意")


For Each nd In trv.AllNodes
    If nd.Checked = True Then     
       
Dim rts() As String = nd.FullPath.Split("\")
        Dim val As String = ""


        For i As Integer = 0 To rts.length - 1
            If val > "" Then
                val = val & " And "
            End If
            val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)
        Next

'给排序列赋值
        Dim drs As List(of DataRow) = DataTables("报价专用").Select(val,"编号")
        For Each dr As DataRow In drs
            dr("排序列") = Vars("flag") + Vars("qorder")*1000000
            Vars("flag") = Vars("flag") + 1
        Next
       

        If flt > "" Then
            flt = flt & " Or (" & val & ")"
        Else
            flt = val
        End If
    End If

Next


Tables(tablename).Filter  = flt
Tables(tablename).Sort = "排序列" ,升序排列
Vars("qorder") = Vars("qorder") + 1

 

 

以上代码运行后,可以根据选择的复选框进行组合,但是却不能根据顺序组合,比如目录树选择顺序是1-3-2,表的的数据组合却是1-2-3

初步推测是 这段代码出了问题,For Each nd In trv.AllNodes,因为遍历事件是按照目录树从上往下的顺序来的,所以不管你怎么选择目录树,系统都会默认从上往下的顺序,不知道怎么修改才好,求大神支招...

不知道哪里的代码除了问题。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/29 16:54:00 [只看该作者]

以下是引用hfapplehao在2019/4/29 16:26:00的发言:

以上代码运行后,可以根据选择的复选框进行组合,但是却不能根据顺序组合,比如目录树选择顺序是1-3-2,表的的数据组合却是1-2-3

初步推测是 这段代码出了问题,For Each nd In trv.AllNodes,因为遍历事件是按照目录树从上往下的顺序来的,所以不管你怎么选择目录树,系统都会默认从上往下的顺序,不知道怎么修改才好,求大神支招...

不知道哪里的代码除了问题。

 

你勾选目录树的时候,记录值

 

afterLoad事件

 

vars("节点") = new List(Of String)

 

勾选的时候,记录值

 

Dim ls As List(Of string) = vars("节点")

If e.node.checked then

    ls.add(e.node.name)

Else

    ls.remove(e.node.name)

End If

vars("节点") = ls

 

msgbox(string.join(",", ls.toarray))

[此贴子已经被作者于2019/4/29 16:55:49编辑过]

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


加好友 发短信
等级:童狐 帖子:200 积分:1997 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2019/4/30 8:26:00 [只看该作者]

老师您好,把这段代码放在窗口的afterload 事件,结果提示错误啊
图片点击可在新窗口打开查看此主题相关图片如下:afterload事件出现错误啊.bmp
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/30 9:23:00 [只看该作者]

 

勾选treeview的时候啊,AfterCheckNode事件啊。

 

 


 回到顶部