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


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

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

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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望: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编辑过]

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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望: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是选择的节点,怎么去过去该节点对应的父键的值呢?


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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/7 15:52:00 [显示全部帖子]

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

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

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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/7 16:27:00 [显示全部帖子]

老师,是增加子项不对。


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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望: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


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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/8 10:03:00 [显示全部帖子]

老师,新增加的节点还是定位不到新增加的行

AfterSelectNode代码如下:

With Tables(vars("editTable")) 
    Dim r As Integer
    If e.node.Level = 1 Then
        r = .Findrow("分组 = '" & e.Node.ParentNode.Name &  "' And 名称 = '" & e.Node.Name & "'")
    ElseIf e.node.Level = 0 Then
        r = .Findrow("分组 = '" & e.Node.Name &  "' And 名称 Is Null")
    End If
    If r >= 0 Then '如果找到的话
        .Position = r '定位到找到的行.
    End If
End With

[此贴子已经被作者于2018/8/8 10:03:33编辑过]

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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/8 11:05:00 [显示全部帖子]

老师,还有个问题,有通过右边记录窗口更改分组名或是新的节点名称,目录树怎么同时更新呢?

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


加好友 发短信
等级:狐精 帖子:3205 积分:21311 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2018/8/8 11:44:00 [显示全部帖子]

我增加了一个辅助列,DataColChanged代码如下,没有同步修改,哪儿逻辑不对呢?

 

If e.DataCol.Name = "序号" Then
    e.DataRow("辅助ID")="Add_" & e.DataRow("序号")
End If

'窗口控件同步修改
If e.DataCol.Name="名称" Or e.DataCol.Name="分组" Then
    Dim fn As winform.form=vars("editForm")
    If fn.Opened Then
        Dim tr As WinForm.TreeView = fn.Controls("TreeView1")
        For Each sd As  WinForm.TreeNode In tr.AllNodes
            If sd.Name=e.DataRow("辅助ID") Then
                sd.Name=e.NewValue
            End If
        Next
    End If
End If

 

 


 回到顶部