以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于目录树问题请教 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130996) |
||||
-- 作者:jq_shang -- 发布时间:2019/2/13 22:08:00 -- 关于目录树问题请教 部门管理功能窗口,根据部门表,自动生成了部门树。编辑部门树,可以同步编辑部门表。问题:对于新增节点,直接操作删除会提示出错。当然部门树刷新后就能正常删除了,但是,刷新操作会使所有节点关闭,用户体验感觉不便。请教,如何改进代码,使新增树形节点可以直接删除? |
||||
-- 作者:有点甜 -- 发布时间:2019/2/13 22:57:00 -- 做一个具体的实例发上来测试。
不要用datarow,试试用fullpath、fullname http://www.foxtable.com/webhelp/scr/2690.htm
|
||||
-- 作者:jq_shang -- 发布时间:2019/2/13 23:11:00 -- 一、窗口afterload代码: Dim bt4 As WinForm.Button = e.Form.Controls("Button4") bt4.PerformClick()\'这是一个刷新按钮 刷新按钮代码如下: Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1") Select Case _userjibie Case "一级" tr.BuildTree("部门表", "一级|二级|三级|四级","","排序号") tr.Nodes.Insert("显示所有人员",0) Case "二级" tr.BuildTree("部门表", "二级|三级|四级","","排序号") Case "三级" tr.BuildTree("部门表", "三级|四级","","排序号") End Select 二、新增节点按钮: Dim tr As WinForm.TreeView Dim nd As WinForm.TreeNode tr = e.Form.Controls("TreeView1") nd = tr.SelectedNode If nd.level = 3 Then MessageBox.Show("最多允许四层节点!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return End If If nd IsNot Nothing Then Dim dr As DataRow = DataTables("部门表").AddNew dr.Save dr("排序号") = dr("id") Select Case nd.level Case 0 dr("一级") = nd.Text dr("二级") = "新节点" Case 1 dr("一级") = nd.ParentNode.Text dr("二级") = nd.text dr("三级") = "新节点" Case 2 dr("一级") = nd.ParentNode.parentnode.Text dr("二级") = nd.ParentNode.Text dr("三级") = nd.text dr("四级") = "新节点" End Select End If nd = nd.Nodes.Add("新节点") tr.SelectedNode = nd tr.Select() tr.BeginEdit() 三、树形节点结束编辑后的代码aftereditNode: If e.NewText = "" Then e.Cancel = True Return End If Dim pth() As String = e.Node.FullPath.Split("\\") Select Case e.node.Level Case 0 DataTables("部门表").ReplaceFor("一级",e.NewText,"一级 = \'" & pth(0) & "\'") Case 1 DataTables("部门表").ReplaceFor("二级",e.NewText,"一级 = \'" & pth(0) & "\' And 二级 = \'" & pth(1) & "\'") Case 2 DataTables("部门表").ReplaceFor("三级",e.NewText,"一级 = \'" & pth(0) & "\' And 二级 = \'" & pth(1) & "\' And 三级 = \'" & pth(2) & "\'") Case 3 DataTables("部门表").ReplaceFor("四级",e.NewText,"一级 = \'" & pth(0) & "\' And 二级 = \'" & pth(1) & "\' And 三级 = \'" & pth(2) & "\' and 四级 = \'" & pth(3) & "\'") End Select e.Node.Name = e.NewText \'以下设置自动保存 Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1") Dim fn As String = ProjectPath & "部门目录树.foxtr" tr.Save(fn) 四、删除按钮代码: Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1") Dim nd As WinForm.TreeNode = tr.SelectedNode \'MessageBox.show(tr.name) \'MessageBox.show(nd.name),经过测试,程序执行到这里没有出错 If nd IsNot Nothing Then Dim bmid As Integer Dim dr As DataRow = nd.DataRow \'获取生成此节点的行 bmid = dr("id") \'MessageBox.show(bmid) 经过测试,程序执行不到这里就出错啦!找不到对象的实例. Tables("员工基础表").Filter = "[部门ID] = " & bmid If Tables("员工基础表").Rows.Count > 0 MainTable = Tables("员工基础表") MessageBox.show("本部门内有员工,不能删除,只能更改部门名称,或先将部门内员工全部调出后才能删除!","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning) e.Cancel = True MainTable = Tables("部门表") Else Dim pth() As String = nd.FullPath.Split("\\") Select Case nd.Level Case 0 DataTables("部门表").DeleteFor("一级 = \'" & pth(0) & "\'") Case 1 DataTables("部门表").DeleteFor("一级 = \'" & pth(0) & "\' And 二级 = \'" & pth(1) & "\'") Case 2 DataTables("部门表").DeleteFor("一级 = \'" & pth(0) & "\' And 二级 = \'" & pth(1) & "\' And 三级 = \'" & pth(2) & "\'") Case 3 DataTables("部门表").DeleteFor("一级 = \'" & pth(0) & "\' And 二级 = \'" & pth(1) & "\' And 三级 = \'" & pth(2) & "\' and 四级 = \'" & pth(3) & "\'") End Select nd.Delete() End If tr.Select() End If 五、对于已有的节点,或者新增节点后执行代码刷新树形,删除按钮代码执行正常,节点和表中数据同步删除成功。 [此贴子已经被作者于2019/2/13 23:20:12编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/2/14 8:53:00 -- 改成
Dim dr As DataRow = nd.DataRow \'获取生成此节点的行
If dr Is Nothing Then
msgbox(123)
msgbox("这里自己用fullpath合成条件,不能用id")
else
bmid = dr("id")
Tables("员工基础表").Filter = "[部门ID] = " & bmid
End if
|
||||
-- 作者:jq_shang -- 发布时间:2019/2/14 9:23:00 -- 请教甜版,按您的要求做了个演示,请您过目。单击新节点已经出错了,说明新增节点的动作没有做到位,不知道如何做。另外,上传的附件自己看不到,您能看到附件吗? [此贴子已经被作者于2019/2/14 9:29:18编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2019/2/14 9:23:00 -- 以下是引用jq_shang在2019/2/14 9:23:00的发言:
按您的要求做了个演示,请您过目。单击新节点已经出错了。
具体项目发上测试。
认认真真看懂4楼啊。 |
||||
-- 作者:jq_shang -- 发布时间:2019/2/14 9:24:00 -- 我自己看不到上传的附件哈。 |
||||
-- 作者:有点甜 -- 发布时间:2019/2/14 9:25:00 -- 认认真真看懂4楼,合成类似这样的条件
"一级 = \'" & pth(0) & "\' And 二级 = \'" & pth(1) & "\' And 三级 = \'" & pth(2) & "\'" |
||||
-- 作者:jq_shang -- 发布时间:2019/2/14 9:30:00 -- 项目按附件发上了。
|
||||
-- 作者:有点甜 -- 发布时间:2019/2/14 9:34:00 -- 这段代码多余,请删除
|