树型控件treeview与数据库 用TREEVIEW 怎样动态添加,修改,删除字节点保存到数据库然后数据库的表数据如何加入到TREEVIEW控件中? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TREEVIEW中添加节点,同时往数据库中写东西很简单的 你查一下帮助文档,TREEVIEW支持好多操作!TREEVIEW一旦构建起来,就可以独立操作的! function TreeFind(TreeView: TTreeView; text: string): boolean;implementationvar List: TStringList; //用于记录各个id及其在树中所对应的节点,从而实现快速查找procedure MakeTree(Query: TADOQuery; TableName: string; TreeView: TTreeView);begin TreeView.Items.BeginUpdate; list.Clear; TreeView.items.clear; if query.Active then query.Close; Query.SQL.Text := 'SELECT * FROM ' + TableName + ' ORDER BY PID, ID'; Query.Open; query.DisableControls; TreeView.Items.Clear; list.Clear; List.Sorted := True; query.First; while not Query.Eof do begin addtreenode(Query, TreeView); //依次增加所有的节点 Query.Next; end; TreeView.Items.EndUpdate; query.EnableControls; if treeview.Items.Count < 1 then exit; treeview.Select(treeview.Items.Item[0]); // treeview.SetFocus;end;procedure addtreenode(Query: TADOQuery; TreeView: TTreeView; bj: boolean = false);var index: integer; Node: TTreeNode;begin if Query.FieldByName('PID').AsInteger = 0 then { ParentID=0,顶层节点 } Node := TreeView.Items.AddChildObject(nil, Query.FieldByName('nName').AsString, query.GetBook)//增加节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中 else begin Index := List.IndexOf(Query.FieldByName('PID').AsString); Node := TreeView.Items.AddChildObjectFirst(TTreeNode(List.Objects[Index]), Query.FieldByName('nName').AsString, query.GetBook);//增加子节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中 end;//增加当前节点的信息到列表中,以实现在列表中快速查找节点的功能。 List.AddObject(Query.FieldByName('ID').AsString, Node); if bj then begin treeview.Select(node); // treeview.SetFocus; end;end;procedure deltree(query: TAdoQuery; TreeView: TTreeView);var node: TTreenode;//删除当前选择的节点下的所有节点(不删除当前选择的节点) procedure delnode(node: TTreenode); var i: integer; childnode: TTreenode; begin for i := 0 to node.Count - 1 do begin childnode := node.Item[i]; //取当前节点下的所有节点 query.GotoBook(childnode.Data); //移到节点所对应的记录 list.Delete(list.IndexOf(query.FieldByName('ID').AsString)); //删除列表中的数据 query.Delete; //删除对应的记录 if node.HasChildren then delnode(childnode); //有子节点则递归直到所有的数据删除完毕 end; end;{另一方法:用一个递归:procedure doSearch(tn: TTreeNode);var i: ingeger; begin if tn.HasChildren then begin for i := tn.Count -1 downto 0 do doSearch(tn[i]); end else begin //这里是你对每个节电要做的事情 end;end;}begin node := treeview.Selected; if node = nil then exit;//删除当前选择的节点下的所有节点(不删除当前选择的节点) delnode(node);//删除当前选择的节点 query.GotoBook(node.Data); list.Delete(list.IndexOf(query.FieldByName('ID').AsString)); query.Delete; node.Delete; TreeView.SetFocus;end;procedure AddChildNode(Query: TADOQuery; TreeView: TTreeView;nodeName:string);var id: integer;begin id := query.FieldByName('ID').AsInteger; //记下当前的节点编号 query.Append; query.FieldByName('PID').AsInteger := id; //新增加的子节点的父节点编号即为id query.FieldByName('nName').AsString := nodeName; query.post; addtreenode(query, treeview, true);end;procedure AddNode(Query: TADOQuery; TreeView: TTreeView;nodeName:String);var pid: integer;begin pid := query.FieldByName('pID').AsInteger; //记下当前节点的父节点编号 query.Append; query.FieldByName('PID').AsInteger := pid; //新增加的子节点的父节点编号即为pid query.FieldByName('nName').AsString := nodeName; query.post; addtreenode(query, treeview, true);end;procedure AddRootNode(Query: TADOQuery; TreeView: TTreeView;RootName:String);var pid: integer;begin pid := query.FieldByName('pID').AsInteger; //记下当前节点的父节点编号 query.Append; query.FieldByName('PID').AsInteger :=0; //新增加的子节点的父节点编号即为pid query.FieldByName('nName').AsString := RootName; query.post; addtreenode(query, treeview, true);end;procedure Treechange(query: TADOQuery; node: TTreenode);begin query.GotoBook(node.Data);end;procedure TreeEdit(query: TADOQuery; text: string);begin query.Edit; query.FieldByName('nName').AsString := text; query.post;end;procedure treeselect(query: Tadoquery; TreeView: TTreeView);var index: integer; Node: TTreeNode;begin Index := List.IndexOf(Query.FieldByName('ID').AsString); Node := TTreeNode(List.Objects[Index]); treeview.Selected := Node; treeview.SetFocus;end;function TreeFind(TreeView: TTreeView; text: string): boolean;var i: integer;begin Result := false; for i := 0 to treeview.Items.Count - 1 do begin if treeview.Items.Item[i].Text = text then begin treeview.Select(treeview.Items.Item[i]); treeview.SetFocus; Result := true; exit; end; end;end;initialization List := TStringList.Create;finalization list.Free;end. dll调用dll问题? 关于单机版程序后台数据库的问题..希望知道的给个解答 如何发布水晶报表? TC2.0AGV模式下16种标准颜色在Delphi中对应的TColor值是多少,谢谢! 这里有没有西安的朋友?高新三路的 西安巨维科技有限公司 咋样? 几个搞的我头痛的问题 请大家帮忙 题目容易,要分的快来! 问一下大家在工作中用delphi的什么帮助?????????? 是delphi的自带帮助嘛? 烦人的问题!!! 关于midas服务器的问题 delphi中,如何取出某个对象的地址? Object Pascal的VMT,DMT是怎么回事?
很简单的
TREEVIEW一旦构建起来,就可以独立操作的!
List: TStringList; //用于记录各个id及其在树中所对应的节点,从而实现快速查找procedure MakeTree(Query: TADOQuery; TableName: string; TreeView: TTreeView);
begin
TreeView.Items.BeginUpdate;
list.Clear;
TreeView.items.clear;
if query.Active then query.Close;
Query.SQL.Text := 'SELECT * FROM ' + TableName + ' ORDER BY PID, ID';
Query.Open;
query.DisableControls;
TreeView.Items.Clear;
list.Clear;
List.Sorted := True;
query.First;
while not Query.Eof do
begin
addtreenode(Query, TreeView); //依次增加所有的节点
Query.Next;
end;
TreeView.Items.EndUpdate;
query.EnableControls;
if treeview.Items.Count < 1 then exit;
treeview.Select(treeview.Items.Item[0]);
// treeview.SetFocus;
end;procedure addtreenode(Query: TADOQuery; TreeView: TTreeView; bj: boolean = false);
var
index: integer;
Node: TTreeNode;
begin
if Query.FieldByName('PID').AsInteger = 0 then { ParentID=0,顶层节点 }
Node := TreeView.Items.AddChildObject(nil, Query.FieldByName('nName').AsString, query.GetBook)
//增加节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中
else
begin
Index := List.IndexOf(Query.FieldByName('PID').AsString);
Node := TreeView.Items.AddChildObjectFirst(TTreeNode(List.Objects[Index]),
Query.FieldByName('nName').AsString, query.GetBook);
//增加子节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中
end;
//增加当前节点的信息到列表中,以实现在列表中快速查找节点的功能。
List.AddObject(Query.FieldByName('ID').AsString, Node);
if bj then
begin
treeview.Select(node);
// treeview.SetFocus;
end;
end;procedure deltree(query: TAdoQuery; TreeView: TTreeView);
var
node: TTreenode;
//删除当前选择的节点下的所有节点(不删除当前选择的节点)
procedure delnode(node: TTreenode);
var
i: integer;
childnode: TTreenode;
begin
for i := 0 to node.Count - 1 do
begin
childnode := node.Item[i]; //取当前节点下的所有节点
query.GotoBook(childnode.Data); //移到节点所对应的记录
list.Delete(list.IndexOf(query.FieldByName('ID').AsString)); //删除列表中的数据
query.Delete; //删除对应的记录
if node.HasChildren then delnode(childnode); //有子节点则递归直到所有的数据删除完毕
end;
end;
{另一方法:
用一个递归:
procedure doSearch(tn: TTreeNode);
var i: ingeger;
begin
if tn.HasChildren then
begin
for i := tn.Count -1 downto 0 do doSearch(tn[i]);
end
else
begin
//这里是你对每个节电要做的事情
end;
end;}begin
node := treeview.Selected;
if node = nil then exit;
//删除当前选择的节点下的所有节点(不删除当前选择的节点)
delnode(node);
//删除当前选择的节点
query.GotoBook(node.Data);
list.Delete(list.IndexOf(query.FieldByName('ID').AsString));
query.Delete;
node.Delete;
TreeView.SetFocus;
end;procedure AddChildNode(Query: TADOQuery; TreeView: TTreeView;nodeName:string);
var
id: integer;
begin
id := query.FieldByName('ID').AsInteger; //记下当前的节点编号
query.Append;
query.FieldByName('PID').AsInteger := id; //新增加的子节点的父节点编号即为id
query.FieldByName('nName').AsString := nodeName;
query.post;
addtreenode(query, treeview, true);
end;procedure AddNode(Query: TADOQuery; TreeView: TTreeView;nodeName:String);
var
pid: integer;
begin
pid := query.FieldByName('pID').AsInteger; //记下当前节点的父节点编号
query.Append;
query.FieldByName('PID').AsInteger := pid; //新增加的子节点的父节点编号即为pid
query.FieldByName('nName').AsString := nodeName;
query.post;
addtreenode(query, treeview, true);
end;procedure AddRootNode(Query: TADOQuery; TreeView: TTreeView;RootName:String);
var
pid: integer;
begin
pid := query.FieldByName('pID').AsInteger; //记下当前节点的父节点编号
query.Append;
query.FieldByName('PID').AsInteger :=0; //新增加的子节点的父节点编号即为pid
query.FieldByName('nName').AsString := RootName;
query.post;
addtreenode(query, treeview, true);
end;
procedure Treechange(query: TADOQuery; node: TTreenode);
begin
query.GotoBook(node.Data);
end;procedure TreeEdit(query: TADOQuery; text: string);
begin
query.Edit;
query.FieldByName('nName').AsString := text;
query.post;
end;procedure treeselect(query: Tadoquery; TreeView: TTreeView);
var
index: integer;
Node: TTreeNode;
begin
Index := List.IndexOf(Query.FieldByName('ID').AsString);
Node := TTreeNode(List.Objects[Index]);
treeview.Selected := Node;
treeview.SetFocus;
end;function TreeFind(TreeView: TTreeView; text: string): boolean;
var
i: integer;
begin
Result := false;
for i := 0 to treeview.Items.Count - 1 do
begin
if treeview.Items.Item[i].Text = text then
begin
treeview.Select(treeview.Items.Item[i]);
treeview.SetFocus;
Result := true;
exit;
end;
end;
end;initialization
List := TStringList.Create;finalization
list.Free;end.