Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1257533
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-01-04 16:55:16



我的树是数据库一次性加载的,但是我从其他地方修改了数据后,怎么同步树的节点属性?  
  就是怎么更改树节点的名称呢?  
   
  仿佛就是调用函数:TreeView1Edited(Sender:   TObject;   Node:   TTreeNode;  
      var   S:   string);     的问题

例如我在主窗口加载树Treeview1后,有一个节点为ss,我想在另一个窗口更改数据库内容,使对应的节点名称改为tt。  
  怎么同步显示呢?  
   
  请教!  
   
  马上给分!

如果另一个窗口是远端另一个客户端的话,哪么简单的办法只能是定时刷  
   
  如果另一个窗口也是本地的话   可以统一修数据更新接口  
   
  如用   ModifyXXX   函数来改数据  
   
  在这个函数里先改库再刷新UI  
   
  要自动做?   俺不知。。。。

uses  
      DBCtrls;  
   
   
  var    
      F:   TFieldDataLink;  
   
  //formcreate  
  begin  
      F   :=   TFieldDataLink.Create;  
      F.Control   :=   Self;  
      F.DataSource   :=   DataSource1;//连接数据库的DATASOURCE;  
      F.FieldName   :=   '要变化的字段';  
      F.OnDataChange   :=   DataChangeEvent;  
  end;  
   
  procedure   TForm1.DataChangeEvent(Sender:   TObject);  
  begin  
      ss.Text   :=   F.Field.AsString;  
  end;

//更改一下  
  procedure   TForm1.DataChangeEvent(Sender:   TObject);  
  begin  
      F.DataSet.Locate('字段'   '值',   []);   //数据库要先定位到当前树节点所对应的记录;  
      ss.Text   :=   F.Field.AsString;  
  end;  
 

做个记号~~~

数据改变后当然可以去找到这个节点把名称修改,但是为什么不这样做?就是写一个初始化treeview的过程,在过程中先清除treeview然后从数据库加载数据,在每次修改数据后调用这个初始化过程即可。我一直是这样做的,在一个项目中对于频繁使用或者比较繁琐的代码要尽量写成过程或者函数,这样使用和修改起来非常方便!!!

树的每一个接点有个属性pointer,你用这个Pointer属性记录和数接点名称对应的ID号+Node的组合码,然后每次更新时候利用这个组合码和ID直接查询到Node会很方便。

Node.Data   可以保存一个指针,可以在这里做点文章



--------------------------
盛大招聘.Net开发工程师

新闻:2008年开源软件10大胜利
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(1140) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~