treeview中如何更新子树

netsong 2003-12-05 10:57:54
treeview中如何更新子树:用Ttreeview显示一个科目树,科目信息从数据库中读取。当我对节点进行拖拽的时候(如节点A,编号0201,拖到目标节点B,编号0302,则将A作为B的子节点,A的编号变为030201),应该改变其Ttreenode的索引值,使其显示与数据库的信息更新保持一致。也就是说在treeview中,只对拖拽变化的部分(一个子树)进行更新,并且在拖拽后使A节点被选中,怎么做呢?
...全文
51 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
goldpony 2003-12-17
  • 打赏
  • 举报
回复
只要将它的父节点改变就行了。
cmain83 2003-12-17
  • 打赏
  • 举报
回复
给你代码(注:楼上贴的是我留的..)

=========================================

回复人: cmain83(心缘※草) ( ) 信誉:102 2003-12-15 15:49:00 得分:0


//在拖拽完成事件中添加如下代码

//现进行数据库操作,以更改数据库中的数据

TreeView.结点A.MoveTo(TreeView.结点B, naAddChild);//移动结点
TreeView.结点A.Caption := '30201';//修改显示或索引
TreeView.结点A.Selected := True;//选中结点A
TreeView.SetFocus;//不会解释,可以把这行注释掉看看结果 :)

//如果还要改A结点的子节点数据就在此加上处理代码

=========================================

//遍历子树
procedure SetSubTreeNodeData(ParentNode: TTreeNode);
var
i: Integer;
begin
for i := 0 to ParentNode.Count - 1 do//遍历子树
begin
   {
ParentNode.Item[i].Text := IntToStr(i);
……
   此处换上你的处理代码 
}
if ParentNode.Item[i].Count > 0 then//如果它有子树
SetSubTreeNodeData(ParentNode.Item[i]);//处理它
end;
end;

netsong 2003-12-16
  • 打赏
  • 举报
回复
对,需要的就是楼上的最有一句所说的代码
bingjiling 2003-12-16
  • 打赏
  • 举报
回复
//在拖拽完成事件中添加如下代码

//现进行数据库操作,以更改数据库中的数据

TreeView.结点A.MoveTo(TreeView.结点B, naAddChild);//移动结点
TreeView.结点A.Caption := '30201';//修改显示或索引
TreeView.结点A.Selected := True;//选中结点A
TreeView.SetFocus;//不会解释,可以把这行注释掉看看结果 :)

//如果还要改A结点的子节点数据就在此加上处理代码
bingjiling 2003-12-16
  • 打赏
  • 举报
回复
http://search.csdn.net/expert/topic/51/5104/2002/4/11/640109.htm
netsong 2003-12-16
  • 打赏
  • 举报
回复
这个操作也是只修改了一个节点阿。我需要的修改整个子树,肯定是需要遍历的。
herofy 2003-12-15
  • 打赏
  • 举报
回复
记住上级结点,在完成对数据库的操作后,重建上级结点下的树
cmain83 2003-12-15
  • 打赏
  • 举报
回复
呵。
犯了个低级错误

TreeView.结点A.Caption := '30201';

应该是

TreeView.结点A.Text := '30201';
cmain83 2003-12-15
  • 打赏
  • 举报
回复
//在拖拽完成事件中添加如下代码

//现进行数据库操作,以更改数据库中的数据

TreeView.结点A.MoveTo(TreeView.结点B, naAddChild);//移动结点
TreeView.结点A.Caption := '30201';//修改显示或索引
TreeView.结点A.Selected := True;//选中结点A
TreeView.SetFocus;//不会解释,可以把这行注释掉看看结果 :)

//如果还要改A结点的子节点数据就在此加上处理代码
netsong 2003-12-15
  • 打赏
  • 举报
回复
??
workhyj 2003-12-09
  • 打赏
  • 举报
回复
http://search.csdn.net/expert/topic/51/5104/2002/4/11/640109.htm
hyj122 2003-12-09
  • 打赏
  • 举报
回复
http://search.csdn.net/expert/topic/52/5201/2001/9/24/300009.htm
netsong 2003-12-09
  • 打赏
  • 举报
回复
谢谢楼上的二位,不过介绍的东西对我没有什么用处
ksxm 2003-12-06
  • 打赏
  • 举报
回复
由于节点的ID是唯一的,所以你只要更改拖动的节点的上级ID就可以了,我建立新节点的时候是循环判断的(当然多的时候速度会受影响),保证了不会重复

也有种做法是写一个函数,递归调用,然后把节点下的子节点内容重新建立ID
netsong 2003-12-06
  • 打赏
  • 举报
回复
详细一些,否则怎么给分呢?:)
netsong 2003-12-06
  • 打赏
  • 举报
回复
其下节点ID也许要改变,否则就不用更新子树了。

我不缺思想,但缺少实现方法。
angelior 2003-12-06
  • 打赏
  • 举报
回复
Drop事件
Tensionli 2003-12-06
  • 打赏
  • 举报
回复
up
hcjhjy 2003-12-06
  • 打赏
  • 举报
回复
可以的,用程序更新编码啊,网上有很多的
constantine 2003-12-06
  • 打赏
  • 举报
回复
加载更多回复(1)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧