以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多选筛选树如何自动更新及实现显示“■”的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=191866)

--  作者:hbfnmxb
--  发布时间:2024/5/12 15:47:00
--  多选筛选树如何自动更新及实现显示“■”的问题
第一个问题:多选筛选树如何自动更新
按照帮助文件,自己设计了一个多选筛选树,需要每次导入数据后,自动更新,如何加代码
图片点击可在新窗口打开查看此主题相关图片如下:00.png
图片点击可在新窗口打开查看

有的时候,第一节点是物理,有的时候是历史;第二节点有的时候是从-15开始,15结束,这里的筛选树,再导入数据后,不能自动更新。
窗口Afterload事件代码如下:
e.Form.Controls("TreeView1").BuildTree("专业分析", "首选科目|低分同位分差|专业类|专业名称|省份")
AftreCheckNode事件代码如下:
Dim nms As String() = {"首选科目","低分同位分差",  "专业类", "专业名称","省份"} \'指定生成目录树的各列 
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 
For Each nd In trv.AllNodes 
    If nd.Checked 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
        If flt > "" Then
            flt = flt & " Or (" & val & ")"
        Else
            flt = val
        End If
    End If
Next
Tables("专业分析").Filter = flt
第二个问题:
第一节点没选,第二节点也没有选,第三节点选择了,显示打了“对勾”,第一节点与第二节点没有任何显示,能不能在第三节点选择的前提下,实现第一节点与第二节点显示“实心方块”,就是■这个样子的!老师,这个想法能实现吗?


--  作者:有点蓝
--  发布时间:2024/5/12 20:42:00
--  
1、每次导入数据后重新调用BuildTree生成目录树

2、目录树只有勾选或者不勾选2种状态,没有■这个样子
上级同步勾选可以在AfterCheckNode事件这样

if e.Node.Checked 
dim pn as WinForm.TreeNode = e.Node.ParentNode
do while pn  IsNot Nothing Then 
    
pn .Checked = true
pn  = pn.ParentNode
loop
end if

--  作者:hbfnmxb
--  发布时间:2024/5/13 9:20:00
--  
以下是引用有点蓝在2024/5/12 20:42:00的发言:
1、每次导入数据后重新调用BuildTree生成目录树
重新调用BuildTree生成目录树,能自动实现吗?现在可以手动关闭窗口,然后再打开,这样很麻烦!


--  作者:有点蓝
--  发布时间:2024/5/13 9:36:00
--  
把BuildTree放到导入的代码后面不就行了
--  作者:hbfnmxb
--  发布时间:2024/5/13 18:56:00
--  
以下是引用有点蓝在2024/5/13 9:36:00的发言:
把BuildTree放到导入的代码后面不就行了这里还是不懂:
导入代码如下:
e.Form.Controls("Label1").Text = "正在从【基础数据】表中导入所选专业,大约耗时210秒,3分钟左右,请稍后..."
Application.DoEvents()
Dim timestart, timeend As Date
timestart = Date.now

For Each dr1 As DataRow In DataTables("基础数据").Select("[确定导入] = true")
    Dim dr2 As DataRow = DataTables("专业分析").AddNew()
    For Each dc As DataCol In DataTables("基础数据").DataCols
        dr2(dc.Name) = dr1(dc.name)
    Next
Next

Tables("专业分析").Sort = "低分等效 DESC" \'按"低分等效"列降序排列


Dim drs As List(Of DataRow)
drs = DataTables("专业分析").Select("[确定导入] = True")
For Each dr As DataRow In drs
    dr("确定导入") = False
Next

e.Form.Controls("TreeView1").BuildTree("专业分析", "首选科目|低分同位分差|专业类|专业名称|省份")  ‘这里是加上的BuildTree,提示找不到TreeView1。

e.Form.Controls("Label1").Text = "从【基础数据】表中所选专业导入完毕!"
timeend = Date.now
e.Form.Controls("Label1").text = "耗时" & (timeend - timestart).TotalSeconds & "秒"
Messagebox.show("从【基础数据】表中已导入符合条件的行,共" & (Tables("专业分析").rows.count) & "行", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
老师,这里如何修改
图片点击可在新窗口打开查看此主题相关图片如下:22.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2024/5/13 20:47:00
--  
说明"TreeView1"不是这个窗口的,改为合适的窗口名,Forms("某窗口").Controls("TreeView1").BuildTree
--  作者:hbfnmxb
--  发布时间:2024/5/13 21:02:00
--  
好了,感谢老师,解决了大问题
--  作者:hbfnmxb
--  发布时间:2024/5/13 21:13:00
--  
老师,再问个问题,如何某一列的内容发生变化,这一列正好是多选筛选树的一个节点,如何设置更新?
--  作者:hbfnmxb
--  发布时间:2024/5/14 12:57:00
--  
老师,假如某一列内容发生变化,这一列正好是多选筛选树的一个节点,如何设置更新?谢谢老师
--  作者:cd_tdh
--  发布时间:2024/5/14 13:10:00
--  
表中设置代码,给目录树赋值