当前位置:主页>仓库管理软件> 列表

TreeView节点移动难题 找速达财务软件

库存管理软件版1楼: 表:
ID Dept
10 董事会
1010 总经办
101010 行政办
10101010 人事部
1011 财务办
101011 厂长办
10101110 生产部
10101111 采购部
1010111010维修班
生成树:
架构树

|——[1010]总经办
| |——[101010]行政办
| | |——[10101010]人事部
| |——[101011]厂长办
| |——[10101110]生产部
| |——[1010111010]维修班
| |——[10101111]采购部
|——[1011]财务办
当我把[101011]厂长办拖移到[1010]总经办后,怎样把厂长办及其子节点的编号按编码规律作相应更改

2楼: “当我把[101011]厂长办拖移到[101011]厂长办后”写错了吧! 如酒店管理软件

3楼: 1、需要获得目标节点的代码 FatherCode
2、需要获得目标节点的最大子节点代码 MaxCode [此处涉及到你的编码规则,按规则计算最大子节点的+1的节点代码]
3、将移动的节点数据进行更改 ThisCode := MaxCode+1;ThisFatherCode := FatherCode;

4楼: 我的编码规则就是表中ID号
楼上说的我也考虑过了,可考虑不全面

5楼: 解决了吗?我也有这个问题,帮你顶

6楼: 还没解决啊,还在等,可能希望不大

库存管理软件版7楼: 我估计你的树也不大,从头生成一边就成了,应该不难吧

8楼: “当我把[101011]厂长办拖移到[1010]总经办后”还是不对吧!应该改成
“当我把[101011]厂长办拖移到[101010]行政办后”。你的编码还是挺有规律的啊!
根接点的编码ChildNo := preNo+''1''+number;拖动的时候目的节点的No+‘1’
+inttostr(chileCount+1)就是要拖动结点的新No,在更改之前,用一个变量存储她
前面的No,然后利用这个变量去遍历它的跟结点啊!(使用递归,建议起用个队列);
我是菜鸟,仅做参考!

9楼: 想刷谁就setit(谁)

procedure TForm1.Button1Click(Sender: TObject);

procedure setit(curnode: TTreeNode);
var
s, c : TTreeNode;
begin
if curnode = nil then exit;
if curnode.getPrevSibling = nil then
curnode.Text := curnode.Parent.Text + ''10''
else
curnode.Text := inttostr(strtoint(curnode.getPrevSibling.Text) + 1);

c := curnode.getFirstChild;
if c <> nil then
begin
//有孩子
setit(c);
end;
//兄弟
s := curnode.getNextSibling;
if s <> nil then
s.Text := inttostr(strtoint(curnode.Text) + 1);
setit(s);
end;

var
a, b : TTreeNode;
begin
a := TreeView1.Items.GetFirstNode;
a.Text := ''10'';
a.Expand(true);
b := a.getFirstChild;
setit(b);
end;

10楼: to bjyplbx:
curnode.Text := inttostr(strtoint(curnode.getPrevSibling.Text) + 1);
不太好吧!如果树比较深,可能会越界!
curnode.Text := preNote.Text+''1''+inttostr(preNote.Item.Count);

11楼: to lmk:
事这个样子的,让楼主自己改呗,基本这样可以实现了

12楼: 开始是怎么生成的编号,遍历被移动的结点的子节点,从新生成编号就好了。 如速达财务软件

13楼: 我也在做这个类似的东西。我准备用在组织架构中的。
有空联系:
towady@gmail.com
QQ:32028658
认证输入:TreeView