以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  增加子节点父键要保持和已有分组不变  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=123056)

--  作者:cd_tdh
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间:2018/8/7 14:23:00
--  

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

 

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

 

2、改成

 

msgbox(sd.name)

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


--  作者:cd_tdh
--  发布时间: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是选择的节点,怎么去过去该节点对应的父键的值呢?


--  作者:有点甜
--  发布时间: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
--  发布时间:2018/8/7 15:52:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目12.foxdb

老师,还不对,做了个示例,麻烦看看。
--  作者:有点甜
--  发布时间: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
--  发布时间:2018/8/7 16:27:00
--  

老师,是增加子项不对。


--  作者:有点甜
--  发布时间: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
--  发布时间: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


--  作者:有点甜
--  发布时间: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