使用TreeView与数据表关联建树时,数据表中有一字段OrderId(专门用来排序)对应TreeView各节点的absoluteIndex属性。
OrderId Name TreeView节点的absoluteIndex
0 aaa 0
1 bbb 1
2 ccc 2
... ... ...
但是当在TreeView上实现对节点(包括及下子节点)进行拖曳时,如何使改变后的节点
最新的absoluteIndex及时更新到数据表的OrderId字段值。目前我可以用对整个树视图搜索的方式更新OrderId的值,但是当表中记录数据较多时,速度很慢。希望各位能够提供更好的方法。
OrderId Name TreeView节点的absoluteIndex
0 aaa 0
1 bbb 1
2 ccc 2
... ... ...
但是当在TreeView上实现对节点(包括及下子节点)进行拖曳时,如何使改变后的节点
最新的absoluteIndex及时更新到数据表的OrderId字段值。目前我可以用对整个树视图搜索的方式更新OrderId的值,但是当表中记录数据较多时,速度很慢。希望各位能够提供更好的方法。
我做树的时候,在数据库中使用的结构如下:ID PARENTID NAME(CAPTION)....
1 -1 ---
2 -1 ---
3 -1 ---
4 1 ---
5 1 ---
其中PARENTID=-1表示是根节点。然后4的父节点是1,5的父节点是1。这样通过ID,PARENTID就可以确定了树结构的所有的节点的关系了。你的各个节点的关系是怎么确定的?同时,如果你的树结构中如果层关系不多的话,你可以确定每一个节点的父节点,比如最大的层为10,则树结构表的关系如下:id parentid name(caption), r0,r1,r2,r3,r4,r5,r6,r7,r8,r9
这样任何一个节点,你可以从数据库中得到该节点是第几层,同时各层的父节点。比如有一条记录如下:
ID NAME R0 R1 R2 R3 R4 R5 R6 R7 R8 R9
100 --- -1 2 3 4 5 100 -2 -2 -2 -2
这样你就知道100这条记录是第5层的子节点。其中他的第一层节点是2,第二层父节点是3,依次就可以了。
这样在节点拖动的时候,就可以非常方便的更改数据库中结构,只要找到目的父节点的数据,然后将父节点的R0到R9的数据更新到本记录的数据上,然后在更改本节点的本层的数据就可以了,同时更改所有子节点的数据(update tTree set () where R5=100 )就可以了。你的树结构表建的非常的奇怪。因此不能给你帮助了。
ID ParentID Seq_No OrderId(仅用于排序)
1 0 0 1
2 0 1 2
3 0 2 3
4 1 0 4
5 1 1 5
中PARENTID=0 表示是根节点。然后4的父节点是1,5的父节点是1,同父节点的根据字段Seq_No的值进行排序。
因此是否可以动动OrderID的脑筋,是否OrderID数据可以不唯一,或者采用复合模式,即采用ParentID*100000+?的模式?那样可能就好一点,因为你拖动后,找到发生更改的Node的新的父节点的ID,然后本Node的OrderID就可以进行重新计算,而不影像其他的Node的OrderID属性。你说呢?
QQ 156514982