以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  窗口下加载树,子表不能与父表同步加载,表格形式的加载树又可以。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=108846)

--  作者:aza520
--  发布时间:2017/10/30 20:56:00
--  窗口下加载树,子表不能与父表同步加载,表格形式的加载树又可以。
我用表格形式时,可以实现子表与父表同步加载,用窗口加载树时,子表不能与父表同步加载,请教各位老师。

项目的BeforeLoadInnerTable事件
If e.DataTableName = "S征地记录" Then
    e.Filter = "[_Identify] Is Null"
End If

项目的LoadUserSetting事件
If User.Name = "开发者" Or User.Name = "管理员" Then
    DataTables("S征地记录").LoadFilter = ""
Else
    DataTables("S征地记录").LoadFilter = "乡 = \'" & User.Name & "\' or 县 = \'" & User.Name & "\' or 项目名称 = \'" & User.Name & "\'"
End If
DataTables("S征地记录").Load()

父表"S征地记录"的AfterLoad事件
e.DataTable.LoadChildren("S征地明细")

窗口的AfterLoad事件
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree("S征地记录", "项目名称|县|乡")
trv.Nodes.Insert("显示所有行",0)

目录树的Dim Filter As String事件
Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[项目名称] = \'" & dr("项目名称") & "\'"
        Case 1
            Filter = "[项目名称] = \'" & dr("项目名称") & "\' And [县] = \'" & dr("县") & "\'"
        Case 2
            Filter = "[项目名称] = \'" & dr("项目名称") & "\' And [县] = \'" & dr("县") & "\' And [乡] = \'" & dr("乡") & "\'"
    End Select
End If
Tables("S征地记录").Filter = Filter
Dim Filter As String
Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[项目名称] = \'" & dr("项目名称") & "\'"
        Case 1
            Filter = "[项目名称] = \'" & dr("项目名称") & "\' And [县] = \'" & dr("县") & "\'"
        Case 2
            Filter = "[项目名称] = \'" & dr("项目名称") & "\' And [县] = \'" & dr("县") & "\' And [乡] = \'" & dr("乡") & "\'"
    End Select
End If
Tables("S征地记录").Filter = Filter


--  作者:有点蓝
--  发布时间:2017/10/30 21:28:00
--  
Tables("S征地记录").Filter属于筛选,不会影响已经加载的数据

改为

If User.Name = "开发者" Or User.Name = "管理员" Then
    DataTables("S征地记录").LoadFilter = Filter
Else
    DataTables("S征地记录").LoadFilter = "(乡 = \'" & User.Name & "\' or 县 = \'" & User.Name & "\' or 项目名称 = \'" & User.Name & "\') and " & Filter
End If
DataTables("S征地记录").Load()

--  作者:aza520
--  发布时间:2017/10/30 21:53:00
--  
还是不行
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171030215205.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2017/10/30 22:16:00
--  
重新贴出完整代码
--  作者:aza520
--  发布时间:2017/10/30 23:32:00
--  
完整代码
--  作者:有点甜
--  发布时间:2017/10/31 9:10:00
--  

是,修改这段

 

Dim Filter As String事件

Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[项目名称] = \'" & dr("项目名称") & "\'"
        Case 1
            Filter = "[项目名称] = \'" & dr("项目名称") & "\' And [县] = \'" & dr("县") & "\'"
        Case 2
            Filter = "[项目名称] = \'" & dr("项目名称") & "\' And [县] = \'" & dr("县") & "\' And [乡] = \'" & dr("乡") & "\'"
    End Select
End If
If User.Name = "开发者" Or User.Name = "管理员" Then
    DataTables("S征地记录").LoadFilter = Filter
Else
    DataTables("S征地记录").LoadFilter = "(乡 = \'" & User.Name & "\' or 县 = \'" & User.Name & "\' or 项目名称 = \'" & User.Name & "\') and " & Filter
End If
DataTables("S征地记录").Load()
 

--  作者:aza520
--  发布时间:2017/10/31 9:35:00
--  
修改后可以实行子表同步,但再加载时又出现”此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据“提示,需再刷新加载树,可是刷新后的加载树只保留刚加载过数据的节点。未加载数据的节点消失
--  作者:有点甜
--  发布时间:2017/10/31 10:06:00
--  

Dim Filter As String = "1=1"

Dim dr = e.node.FullPath.split("\\") \'获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[项目名称] = \'" & dr(0) & "\'"
        Case 1
            Filter = "[项目名称] = \'" & dr(0) & "\' And [县] = \'" & dr(1) & "\'"
        Case 2
            Filter = "[项目名称] = \'" & dr(0) & "\' And [县] = \'" & dr(1) & "\' And [乡] = \'" & dr(2) & "\'"
    End Select
End If
DataTables("S征地记录").save
If User.Name = "开发者" Or User.Name = "管理员" Then
    DataTables("S征地记录").RemoveFor(Filter)
    DataTables("S征地记录").AppendLoad(Filter)
Else
    DataTables("S征地记录").RemoveFor("(乡 = \'" & User.Name & "\' or 县 = \'" & User.Name & "\' or 项目名称 = \'" & User.Name & "\') and " & Filter)
    DataTables("S征地记录").AppendLoad("(乡 = \'" & User.Name & "\' or 县 = \'" & User.Name & "\' or 项目名称 = \'" & User.Name & "\') and " & Filter)
End If