用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧Delphi

一种较简易的树型控件节点构造法

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:14:56


把数据库中的数据在树型控件(TreeView)中正确显示是较为不易,我在实际编程中经常为之头痛,也使用了不少方法,后来仔细研究了cxDBTreeList控件,受到启发解决了问题:
1、 创建一个表,为简化程序,只创建三个数据字段,定义如下:
字段名 类型 长度 说明
Mytext nvarchar 50 要显示的文字
MyID int 4 主关键ID,(可使用自动编号)
MYParentID int 4 记录父主关键ID,无父节点是时为0
2、窗体中放置一个TreeView控件;
2、使用数据控件连接该数据表(本例中使用ADOTable);
3、声明一个过程:
procedure MyNode(MyParentID:string;MyNodeT:TTreeNode);
4、过程代码:
procedure TA_FinanceSubjec.MyNode(MyParentID: string;MyNodeT:TTreeNode);
type
  PMyList = ^AList;
    AList = record
    MyParendID: string;
    MyNodeP: TTreeNode ;
  end;
var
  ATempList: TList;
  I: Integer;
  ARecord:PMyList;
  s:string;
  node:TTreeNode;
begin
   ADOTable1.Filtered:=true;
   ADOTable1.Filter:='' MYParentID =''+MyParentID;
   if ADOTable1.RecordCount<1 then exit;
   ATempList := TList.Create;
   try
    ADOTable1.First;
    while not ADOTable1.Eof  do
    begin
       New(ARecord);
       s:=''(''+ADOTable1MyID.AsString +'')''+ ADOTable1Mytext.AsString  ;
       node:= TreeView1.Items.AddChild(MyNodeT   ,s) ;
       ARecord^.MyParendID:= ADOTable1Mytext.AsString  ;
       Arecord^.MyNodeP  :=node;
       ATempList.Add(Arecord);
       ADOTable1.Next;
      end;
     for I :=0 to ATempList.Count - 1 do
     begin
       Arecord:=ATempList.Items[i];
       MyNode(Arecord^.MyParendID,Arecord^.MyNodeP );
       end;
   finally
    for I := 0 to ATempList.Count - 1 do
      Dispose(ATempList[I]);
    ATempList.Free;
    ADOTable1.Filtered:=false;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 ADOTable1.DisableControls;
 if ADOTable1.Active then
     ADOTable1.Active:=false;
     ADOTable1.Active:=true;
     ADOTable1.First;
     MyNode(''0'',nil  );
  ADOTable1.EnableControls;    
end;
5、改变节点位置时(在OnDragDrop中实现):
var iPos1:integer;s:string;
begin
  ipos1:= pos('')'', TreeView1.Selected.Parent);
 if ipos1>1 then
   begin
  s:=copy(RzTreeView1.Selected.Text,2,iPos-2);
  ADOTable1.Locate(''MyID'',s,[loPartialKey]);
ADOTable1.edit;
   ADOTable1MYParentID.asinteger:=
    StrToInt(copy(TreeView1.Selected.Parent,2, ipos1-2)) ;
ADOTable1.post;
  End;

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:609.37500 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号