问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

TreeView 树形显示的问题 table1 id name pid 1 root 001 2 child 001001 3 child2 001002 4 root2 002

发布网友 发布时间:2022-05-25 01:14

我来回答

1个回答

热心网友 时间:2023-11-20 22:58

给你个例子
unit PublicTree;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ImgList,DB, Menus;

type
TFrameTree = class(TFrame)
tvTree: TTreeView;
ImageList1: TImageList;
procere tvTreeExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procere tvTreeChange(Sender: TObject; Node: TTreeNode);
private
PDataSet:TDataSet;
PID,PName,PParentId:TField;

public
procere TreeInit(DataSet:TDataSet;ID,Name,ParentId:TField);
function TreeAddItem(Parent: TTreeNode;Resort: Boolean): TTreeNode;
procere TreeDeleteItem(node:TTreeNode);
function TreeFindItem(ID:string): TTreeNode;

end;
implementation

uses PubFun;

function TFrameTree.TreeAddItem(Parent: TTreeNode;Resort: Boolean): TTreeNode;
var
ParentNo: string;
node: TTreeNode;
begin
if (parent=nil) or (pos('_',parent.text)<1) then
ParentNo:=''
else
ParentNo:=GetCommaStr(Parent.Text,1,'_');
Pdataset.DisableControls;
Pdataset.First;
while not pdataset.Eof do
begin
if PParentId.AsString= ParentNo then
begin
node:=tvTree.Items.AddChild(parent,pid.asstring+'_'+pname.asstring);
node.HasChildren:=true;
node.ImageIndex:=0;
node.SelectedIndex:=1;
end;
pdataset.Next;
end;
Pdataset.EnableControls;
if Resort and (parent<>nil) then parent.alphasort;
if(Parent<>nil)and(Parent.Count<=0)then Parent.HasChildren:=false;
if tvTree.Selected=nil then
begin
node:=treefinditem(pid.AsString);
tvTree.Selected:=node;
end
else
Pdataset.Locate(pid.FieldName,GetCommaStr(tvTree.Selected.text,1,'_'),[]);
end;

procere TFrameTree.TreeInit(DataSet:TDataSet;ID,Name,ParentId:TField);

begin
PDataset:=Dataset;
PID:=ID;
PName:=name;
PParentID:=parentID;
end;

procere TFrameTree.tvTreeExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
if node.Count<=0 then
treeadditem(node,true);
end;

procere TFrameTree.tvTreeChange(Sender: TObject; Node: TTreeNode);
begin
if pdataset.State in [dsInsert,dsEdit] then pDataset.Post;
if node<>nil then
if pos('_',node.Text)>0 then
if not Pdataset.Locate(PID.FieldName,GetCommaStr(node.text,1,'_'),[]) then
raise exception.Create('记录未找到!');

end;

procere TFrameTree.TreeDeleteItem(node: TTreeNode);
begin
tvTree.Items.Delete(node);
end;

function TFrameTree.TreeFindItem(ID:string): TTreeNode;
var
node:TTreeNode;
begin
Node:= tvTree.Items.GetFirstNode;
if (Node<> nil) and (GetCommaStr(Node.text,1,'_') <> ID) then
repeat
Node := Node.GetNext;
until (Node = nil) or (GetCommaStr(Node.text,1,'_')= ID);
Result := Node;
end;

end.

调用生成
cdsTree.Open;

FrameTree1.TreeInit(cdsTree,cdsTree.FieldByName(CodeField),cdsTree.FieldByName(NameField),cdsTree.FieldByName(ParentField));
node:=FrameTree1.tvTree.Items.Add(nil,TopText);
node.HasChildren:=true;
node.Expand(false);
另外,站长团上有产品团购,便宜有保证追问呵呵,谢谢了,问题已经解决了,用的是xml树型显示的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
WIN7不会自动安装AHCI驱动是怎么回事?每次重装系统后都得我自己安装_百... 钉钉录播课能否查看观看时长 为什么城市轨道要有身高条件 城轨交通运营管理专业现身高吗 城市轨道交通运营管理这个专业是否有身高要求 读城轨专业需要什么条件 学习城轨专业需要什么条件? 城市轨道专业最低的身高要求多少?身高158毕业出来好找工作吗? 城轨专业要求身材吗 城轨专业有身高限制吗 地下室排水为什么不用集水坑了? 地下室集水井污水管一般刷什么颜色 地下室的集水井有没有与排水系统连接 地下室内的集水井内连接潜污的的管道是压力排水吗 地下室集水坑压力排水管可以采用机械三通吗 家里的地下室怎么排水? 地下室压力排水管接到哪里 地下室集水井排水管阀规范安装高度是多少 排水管道排至集水坑需要加设套管吗?有没有规范明确说明的? 请问人防地下室好多集水坑没设计压力排水管道是啥作用的? 地下室集水坑的压力排水管道用冷镀锌管可以吗? 电子烟掉水里了吹亮红灯 绿箩电子烟烟蛋拔出闪红灯 电子烟维修点电子烟充电充不起来,有时候充一分钟他就充满了,然后吸的话又显示为红灯_百度问一问 部落冲突野蛮森之王建时要工人吗 为什么电子烟一吸就亮红灯 部落冲突,8级进击的野蛮人,互刷部落招人,长期招9本到11本的 部落冲突野蛮人之王七级升八级要多少黑水 电子烟亮红灯还可以抽吗 部落冲突我七本,想冲杯至水晶杯,指导一下军队怎么搭配?怎么摆阵型好点?说一下攻略 谁能帮我找下这个网页的MP3地址,下面的代码网址是http:&#47;&#47;hi.baidu.com&#47;%D0%A1eagle 蜘蛛网该怎么说是—条蜘蛛网还是一个蜘蛛网还是—只蜘蛛网呢? 请问节节草鱼腥草枇杷叶一起煮水喝可以吗? 枇杷叶跟鱼腥草煮水是放冰糖还是蜜糖? 鱼腥草和枇杷叶加排骨能一起炖汤吗 枇杷叶和鱼腥草煮水可以和穿心莲片一起吃吗 枇杷叶与鱼腥草和矮脚茶可不可以合并治咳嗽 海啸的啸怎么样组词 啸怎么组词 有啸字的四字词语 海啸的啸怎么写? 如果网上被假的中信证券骗钱,我应该怎么办? 中信证券被骗了怎么追回 中信证券被骗了怎么追回? 我被中信证券骗钱了,给怎么办? 在被骗的中信证券里绑定了卡怎么办 中信证券被骗了怎么办 我被中信证券诈骗了,已报警了,这些钱能拿回来吗? 中信证券只要入钱就提不出来去哪个部门投诉? 中信证券不能提现是被骗了报警有用吗