以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- [求助]树表操作 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=58878)
|
-- 作者:建筑人生
-- 发布时间:2014/10/25 18:18:00
-- [求助]树表操作
此主题相关图片如下:树表操作.jpg
在左边目录树操作增加、减少、上移、下移、等操作右边的表的编码及数据也跟着变化如何写代码
[此贴子已经被作者于2014-10-25 18:18:43编辑过]
|
-- 作者:有点甜
-- 发布时间:2014/10/26 9:54:00
--
不要做实时的变化,你弄一个保存按钮,最后生成一下就好。
参考代码
Dim dt As DataTable = DataTables("表A") dt.DataRows.Clear Dim dic As New Dictionary(of Integer, Integer) Dim prevLevel As Integer = 0 For Each nd As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes If nd.Level = 0 AndAlso dic.count > 0 Then Dim temp = dic(0) dic.Clear dic.Add(0, temp) End If If dic.ContainsKey(nd.Level) = False Then dic.Add(nd.Level, 1) Else dic(nd.Level) = dic(nd.Level) + 1 End If For i As Integer = nd.level + 1 To prevLevel dic(i) = 0 Next prevLevel = nd.Level Dim ndr As DataRow = dt.AddNew Dim str As String = "" For i As Integer = 0 To nd.Level str &= dic(i) & "." Next ndr("第一列") = str.TrimEnd(".") ndr("第二列") = nd.Text Next
|
-- 作者:建筑人生
-- 发布时间:2014/10/26 11:18:00
--
以下是引用有点甜在2014-10-26 9:54:00的发言:
不要做实时的变化,你弄一个保存按钮,最后生成一下就好。
参考代码
Dim dt As DataTable = DataTables("表A") dt.DataRows.Clear Dim dic As New Dictionary(of Integer, Integer) Dim prevLevel As Integer = 0 For Each nd As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes If nd.Level = 0 AndAlso dic.count > 0 Then Dim temp = dic(0) dic.Clear dic.Add(0, temp) End If If dic.ContainsKey(nd.Level) = False Then dic.Add(nd.Level, 1) Else dic(nd.Level) = dic(nd.Level) + 1 End If For i As Integer = nd.level + 1 To prevLevel dic(i) = 0 Next prevLevel = nd.Level Dim ndr As DataRow = dt.AddNew Dim str As String = "" For i As Integer = 0 To nd.Level str &= dic(i) & "." Next ndr("第一列") = str.TrimEnd(".") ndr("第二列") = nd.Text Next
我经常在树添加数据啊,要时时变化,要怎么做
|
-- 作者:有点甜
-- 发布时间:2014/10/26 11:31:00
--
移动以后,点保存重新生成。
[此贴子已经被作者于2014-10-26 11:31:32编辑过]
|
-- 作者:建筑人生
-- 发布时间:2014/10/26 12:25:00
--
‘添加节点代码,我这样写代码,项目工程没有问题,但后面的节点都有问题了,要怎么改,红色字体处有问题 Index + = 1 Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1") If tv.SelectedNode IsNot Nothing Then Dim nd As WinForm.TreeNode = tv.SelectedNode.Nodes.Add(Index,"新节点") tv.SelectedNode = nd tv.Select Dim dr As Row=Tables("主窗口_总表").AddNew() \' Dim dr0 As String=dr("编号") Dim bh As Integer =tv.SelectedNode.ParentNode.Name \'当前节点父编码 If dr0.StartsWith(bh) =False \'如果单据编号前缀不符 Dim max As String Dim x As Integer=len(bh)+3 Dim idx As Integer max = Tables("主窗口_总表").Compute("Max(编号)","len(编号) = " & (len(bh)+3)) If max <>""Then \'如果存在最大编号 idx = CInt(max.Substring(x,3)) + 1 Else idx = 1 \'否则顺序号等于1 End If End If dr("编号") = bh & Format(idx,"000") dr("名称")= tv.SelectedNode.text End If DataTables("总表").Save
[此贴子已经被作者于2014-10-26 12:29:30编辑过]
|
-- 作者:有点甜
-- 发布时间:2014/10/26 14:25:00
--
Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1") If tv.SelectedNode IsNot Nothing Then Dim dr As Row=Tables("主窗口_总表").AddNew() \' Dim bh As String = tv.SelectedNode.Name Dim max As String Dim idx As Integer max = Tables("主窗口_总表").Compute("Max(编号)","编号 like \'" & bh & "%\' and len(编号) = " & len(bh) + 3)
If max <> "" Then \'如果存在最大编号 idx = CInt(max.Substring(bh.length,3)) + 1 Else idx = 1 \'否则顺序号等于1 End If dr("编号") = bh & Format(idx,"000") dr("名称")= tv.SelectedNode.text Dim nd As WinForm.TreeNode = tv.SelectedNode.Nodes.Add(dr("编号"),"新节点") End If DataTables("总表").Save
|
-- 作者:建筑人生
-- 发布时间:2014/10/26 15:48:00
--
Index + = 1 Dim idx As Integer Dim tv As WinForm.TreeView = e.Form.Controls("TreeView1") If tv.SelectedNode IsNot Nothing Then Dim nd As WinForm.TreeNode = tv.SelectedNode.Nodes.Add(Index,"新节点") tv.SelectedNode = nd \'tv.Select \'tv.BeginEdit Dim dr As Row=Tables("主窗口_总表").AddNew() \' Dim dr0 As String=dr("编号") \'msgbox(e.node.level &"级:编码"& e.node.name & "显示名称:"& e.node.text) \'***显示节点显示名称 Dim bh As String =tv.SelectedNode.ParentNode.Name \'当前节点父编码 If dr0.StartsWith(bh) =False \'如果单据编号前缀不符 Dim max As String Dim x As Integer=len(bh)+3 dr("数量")= bh \'测试用 dr("备注")=x \'测试用 max = Tables("主窗口_总表").Compute("Max(编号)","len(编号) = " & x) dr("名称")=max If max <>""Then \'如果存在最大编号 idx = CInt(max.Substring(x-3,3)) + 1\'获得最大编号的后三位顺序号,并加1 Else idx = 1 \'否则顺序号等于1 End If End If dr("编号") = bh & Format(idx,"000") dr("类别")= tv.SelectedNode.text \'测试用 End If DataTables("总表").Save
‘现在这样可以正常使用了,不过我点击新增的节点没有筛选出来,只有重新加载窗体才行,要怎么处理
[此贴子已经被作者于2014-10-26 15:47:57编辑过]
|
-- 作者:有点甜
-- 发布时间:2014/10/26 15:51:00
--
你说的没有筛选出来是什么意思?什么筛选。
|
-- 作者:建筑人生
-- 发布时间:2014/10/26 16:07:00
--
谢谢甜,你的代码可以实现了
|