TreeView的节点唯一对应数据库ID字段的问题

参看帖子http://bbs.csdn.net/topics/60131423


可以用一个 TStrings 来维护这个对应关系,在增加一个 Node 的之后,增加一个 Object 到 TStrings,删除一个 Node 之后,在 TStrings 也同时删除那个 Item。做 Clear 的时候,先 TreeView.Items.Clear, 再 Strings.Clear。下面是一个例子(增加、删除节点时根本不用刷新的):

var
  FIDList:  TStrings;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 创建 TStrings 的对象 FIDList
  FIDList := TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // 清除对象 FIDList
  TreeView1.Items.Clear;  // 很重要,不然会出错
  FIDList.Destroy;
end;

procedure TForm1.AddNodeClick(Sender: TObject);
var
  Node:  TTreeNode;
  Text:  string;
begin
  // 实际操作的时候,Text 和 ID 都是从数据库中读出的
  Text := 'Text' + IntToStr(TreeView1.Items.Count);
  Node := TreeView1.Items.AddChild(nil, Text);
  FIDList.AddObject('ID_' + Text, Node);
end;

procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
  // 删除节点时同时删除关联
  FIDList.Delete(FIDList.IndexOfObject(Node));
end;

procedure TForm1.DelNodeClick(Sender: TObject);
begin
  // 删除节点
  if TreeView1.Selected <> nil then
    TreeView1.Selected.Delete;
end;

procedure TForm1.GetNodeClick(Sender: TObject);
var
  Node: TTreeNode;
begin
  // 通过 ID 访问 Node
  if FIDList.IndexOf(Edit1.Text) >= 0 then
  begin
    Node := TTreeNode(FIDList.Objects[FIDList.IndexOf(Edit1.Text)]);
    ShowMessage(Node.Text);
  end;
end;

procedure TForm1.ShowSelIDClick(Sender: TObject);
begin
  // 取得一个节点对应的 ID 值
  if TreeView1.Selected <> nil then
    ShowMessage(FIDList.Strings[FIDList.IndexOfObject(TreeView1.Selected)]);
end;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值