Foxtable(狐表)用户栏目专家坐堂 → 窗口下加载树,子表不能与父表同步加载,表格形式的加载树又可以。


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

主题:窗口下加载树,子表不能与父表同步加载,表格形式的加载树又可以。

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
窗口下加载树,子表不能与父表同步加载,表格形式的加载树又可以。  发帖心情 Post By: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


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


加好友 发短信
等级:超级版主 帖子:110790 积分:563882 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2017/10/30 21:53:00 [只看该作者]

还是不行
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171030215205.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:110790 积分:563882 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/10/30 22:16:00 [只看该作者]

重新贴出完整代码

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2017/10/30 23:32:00 [只看该作者]

完整代码

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2017/10/31 9:35:00 [只看该作者]

修改后可以实行子表同步,但再加载时又出现”此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据“提示,需再刷新加载树,可是刷新后的加载树只保留刚加载过数据的节点。未加载数据的节点消失

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部