Foxtable(狐表)用户栏目专家坐堂 → 增加子节点父键要保持和已有分组不变


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

主题:增加子节点父键要保持和已有分组不变

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


加好友 发短信
等级:狐精 帖子:3054 积分:20434 威望:0 精华:0 注册:2016/3/28 16:57:00
增加子节点父键要保持和已有分组不变  发帖心情 Post By:2018/8/7 12:40:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180807123637.png
图片点击可在新窗口打开查看

老师如图,增加子节点时,父键和对应的分组父键一致,父键时整数型(如果为字符型,父键出不来),代码怎么修改?

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim sd As WinForm.TreeNode=tr.SelectedNode '当前选择的项
Dim dt As DataTable=DataTables(vars("editTable"))

If sd Is Nothing Then Return
Dim name As String
Dim typ As String
If sd.Level = 1 Then
    MessageBox.Show("不能再增加子节点了!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
Else
    Dim r As DataRow=dt.AddNew
    If sd.Level = 0 Then

        r("分组")=sd.Text
        r("名称")="新节点"
        r("父键")=dt.Compute("Max(父键)","父键 ='" & sd.name & "'")
    End If
    sd = sd.Nodes.Add("新节点")
    tr.SelectedNode = sd
    tr.Select
    tr.BeginEdit()
End If

 

 

上述代码报错:

 

.NET Framework 版本:2.0.50727.8745
Foxtable 版本:2018.7.28.1
错误所在事件:窗口,左侧导航管理,Button4,Click
详细错误信息:
无法在 System.Int32 和 System.String 上执行“=”操作。

[此贴子已经被作者于2018/8/7 13:59:24编辑过]

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


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

1、编辑目录树,请这样做

 

下载信息  [文件大小:324.0 KB  下载次数:36]
图片点击可在新窗口打开查看点击浏览该文件:编辑目录树例子.table

 

2、改成

 

msgbox(sd.name)

r("父键")=dt.Compute("Max(父键)","父键=" & sd.name)


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


加好友 发短信
等级:狐精 帖子:3054 积分:20434 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/7 14:50:00 [只看该作者]

以下是引用有点甜在2018/8/7 14:23:00的发言:

1、编辑目录树,请这样做

 

下载信息  [文件大小:324.0 KB  下载次数:36]
图片点击可在新窗口打开查看点击浏览该文件:编辑目录树例子.table

 

2、改成

 

msgbox(sd.name)

r("父键")=dt.Compute("Max(父键)","父键=" & sd.name)

  老师,是父键的值没传递过来,sd.name是选择的节点,怎么去过去该节点对应的父键的值呢?


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


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

以下是引用cd_tdh在2018/8/7 14:50:00的发言:

  老师,是父键的值没传递过来,sd.name是选择的节点,怎么去过去该节点对应的父键的值呢?

 

r("父键")=dt.Compute("Max(父键)","父键 ='" & sd.parentNode.name & "'")


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


加好友 发短信
等级:狐精 帖子:3054 积分:20434 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/7 15:52:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目12.foxdb

老师,还不对,做了个示例,麻烦看看。

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


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

Dim dt As DataTable=DataTables(vars("editTable"))
Dim r As DataRow=dt.AddNew
Dim mp As String="新节点"
'目录树
Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim sd As WinForm.TreeNode=tr.SelectedNode '当前选择的项
Dim name As String '标题
Dim Typ As String '类型
If sd IsNot Nothing Then
    If sd.Level=0 Then
        typ="新节点"
        name="分组"
    Else
        typ="新节点"
        name="名称"
    End If
Else
    name="名称"
End If
If sd Is Nothing  Then
    r("父键")=dt.Compute("Max(父键)")+1
    r("分组")="新节点"
    r("名称")="名称"
    tr.Nodes.add(r("分组"),mp)
    Dim s As String=r("名称")
    tr.SelectedNode =tr.Nodes(s)
    Return
End If
If sd.Level=0 Then
    r("父键")=dt.Compute("Max(父键)")+1
    r("分组")="新节点"
    r("名称")=""
    tr.Nodes.add(r("分组"),mp)
    Dim s As String=r("名称")
    tr.SelectedNode =tr.Nodes(s)
Else
    r("父键")=dt.Compute("Max(父键)","分组 ='" & tr.SelectedNode.ParentNode.name & "'")+1
    r("分组")= "新节点"
    r("名称")=""
    Dim mynd = tr.SelectedNode.ParentNode.Nodes.add(r("分组"),mp)
    tr.SelectedNode=mynd
End If
tr.Select

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


加好友 发短信
等级:狐精 帖子:3054 积分:20434 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/7 16:27:00 [只看该作者]

老师,是增加子项不对。


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


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

以下是引用cd_tdh在2018/8/7 16:27:00的发言:

老师,是增加子项不对。

 

类似参考

 

    r("父键")=dt.Compute("Max(父键)","分组 ='" & tr.SelectedNode.ParentNode.name & "'")+1
    r("分组")= "新节点"
    r("名称")=""
    Dim mynd = tr.SelectedNode.ParentNode.Nodes.add(r("分组"),mp)
    tr.SelectedNode=mynd


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


加好友 发短信
等级:狐精 帖子:3054 积分:20434 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/7 16:56:00 [只看该作者]

老师,这个代码没问题了,但新增加的子节点在表里面不能定位到该行。

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim sd As WinForm.TreeNode=tr.SelectedNode '当前选择的项
Dim mp As String="新节点"
If sd Is Nothing Then Return
Dim dt As DataTable=DataTables(vars("editTable"))
Dim r0 As Row =Tables(vars("editTable")).Current
Dim ary() As String={"父键"}
For Each ar As String In ary
    If r0("分组")=ar Then Return
Next
Dim name As String
Dim typ As String
If sd.Level = 1 Then
    MessageBox.Show("不能再增加子节点了!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
Else
    Dim r As DataRow=dt.AddNew
    If sd.Level=0 Then
        name="分组"
        typ="新节点"
        r("父键")=dt.Compute("Max(父键)","分组 ='" & sd.name & "'")
        r("分组")=sd.name
        r("名称")=typ
    End If
    sd.Nodes.add(r("分组"),mp)
    sd.Expand
    Dim s As String=r("序号")
    tr.SelectedNode =sd.Nodes(s)
    tr.Select
End If


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


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

    Dim r As DataRow=dt.AddNew
    If sd.Level=0 Then
        name="分组"
        typ="新节点"
        r("父键")=dt.Compute("Max(父键)","分组 ='" & sd.name & "'")
        r("分组")=sd.name
        r("名称")=typ
    End If
    dim mynd = sd.Nodes.add(r("分组"),mp)
    sd.Expand
    tr.SelectedNode = mynd
    tr.Select

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