以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何固定目录树中节点的位置  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=23310)

--  作者:zpx_2012
--  发布时间:2012/9/8 14:47:00
--  如何固定目录树中节点的位置

各位老师,

 

我在流程设置的目录树中增加了表单的流程,确定后设置是保存在表中的,保存前的顺序如上下图

 


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

 

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


下次重新打开时流程显示的顺序却改变了,请问要固定流程的顺序是不是表中还要增加一列顺序列?

代码要怎么写?

谢谢!


--  作者:lin_hailun
--  发布时间:2012/9/8 15:28:00
--  
  呃,这个当然要增加一列保存位置啦。

在确定按钮的点击事件中,遍历所有的节点,然后根据当前节点、父节点、爷节点....查找到所在的行(能唯一就行),修改位置值。

构建树的时候,加入位置列排序。

具体例子自己做吧。

--  作者:狐狸爸爸
--  发布时间:2012/9/8 15:30:00
--  

Dim tv As WinForm.TreeView
tv =e.Form.Controls("TreeView1")
tv.BuildTree("你的表", "表名|流程", "", "表名,[_Identify]")

 

用_Identify没有办法调整位置,最好启用了插入行的功能,那么就可以:

 

Dim tv As WinForm.TreeView
tv =e.Form.Controls("TreeView1")
tv.BuildTree("你的表", "表名|流程", "", "表名,[_SortKey")

 

你窗口中的上移下移按钮,还得交换上下两个节点对应的行的_SortKey值。

 

看看这里,有个Sort参数,很多人都忽略了,连我找个写帮助的人也忽略了:

http://www.foxtable.com/help/topics/0893.htm

 

 

[此贴子已经被作者于2012-9-8 15:41:53编辑过]

--  作者:zpx_2012
--  发布时间:2012/9/8 16:01:00
--  

好的,谢谢二位,我琢磨琢磨看能不能搞定

 

谢谢!


--  作者:zpx_2012
--  发布时间:2012/9/8 16:42:00
--  

再请教一下狐爸,换上下两个节点对应的行的_SortKey值的代码要怎么写啊?

 

谢谢!


--  作者:狐狸爸爸
--  发布时间:2012/9/8 16:55:00
--  

假定要交换dr1和dr2两行的SortKey的值

 

dim v as decimal

v = dr1("_SortKey")

dr1("_SortKey") = dr2("_SortKey")

dr2("_SortKey") = v

 


--  作者:lin_hailun
--  发布时间:2012/9/8 16:58:00
--  
 呃,狐爸,问题应该是查到对应行吧。
--  作者:狐狸爸爸
--  发布时间:2012/9/8 17:06:00
--  
呵呵,是的,不过这个他应该能搞定的,因为一楼的图片表明他都设计好了授权窗口的。
--  作者:zpx_2012
--  发布时间:2012/9/10 17:17:00
--  

我用了如下代码:没有什么出错提示,

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode = tr.SelectedNode
If nd.Level = 1 Then
    If nd IsNot Nothing Then
       
        Dim id As Integer = nd.index
        Dim nd2 As WinForm.TreeNode
        nd2 = nd.ParentNode.Nodes(id-1)
        Dim dr1 As DataRow = DataTables("单据流程").Find("表名 = \'" & nd.ParentNode.text & "\' And 流程 = \'" & nd.text & "\'")
        Dim dr2 As DataRow = DataTables("单据流程").Find("表名 = \'" & nd2.ParentNode.text & "\' And 流程 = \'" & nd2.text & "\'")
        If dr1 IsNot Nothing And dr2 IsNot Nothing Then
            MessageBox.Show(dr1("_SortKey"))
            MessageBox.Show(dr2("_SortKey"))
            Dim v As Integer
            v = dr1("_SortKey")
            dr1("_SortKey") = dr2("_SortKey")
            dr2("_SortKey") = v
        End If
        MessageBox.Show(dr1("_SortKey"))
        MessageBox.Show(dr2("_SortKey"))
        nd.MoveUp()
    End If
End If
tr.Select

 

用MessageBox.Show(dr1("_SortKey"))
   MessageBox.Show(dr2("_SortKey"))两次显示交换产后的值

但为什么移动后两个节点对应行的“_SortKey”并没有交换,?

 

谢谢!


--  作者:狐狸爸爸
--  发布时间:2012/9/10 17:48:00
--  

Dim v As Integer

 

改为:

 

Dim v As Decimal