我的数据库中的一个字段A被设计为treeview的根节点(该字段中仅有5种取值,也就是treeview的根节点总共有5个,设计时加入)另一个字段B的内容作为子节点。现在我需要实现动态动态更改(如插入)数据库时自动更新treeview的子节点,但不知道当用户输入B字段内容时如何自动在treeview的相关根节点下加入新的子节点。请大侠指点,多谢
解决方案 »
- 单元的引用问题!
- 怎么改变dbgrid单元格颜色,我columns是手动加的。defaultdrawing设为false就什么都不显示了。
- 一个看似简单但实质复杂的问题?
- 如何取得ADOQuery中个未知字段的Name
- 使用Table插入数据时的问题(在线等待)
- 求字符串加密函数
- delphi下怎么屏蔽win2000下的ctrl+alt+del啊?
- fcTreeView 保存节点的问题
- delphi中,有什么工具可以查看任何一个我想知道的窗体的名称吗??
- 是32位和64位的问题
- 一个简单问题,希望大家指点,如何在memo中将光标指向最后一条记录,或是socrol到最后一条记录
- 大家帮忙推荐一下感觉最爽的报表打印类控件吧!
MyTreeNode = TreeView1->Items[1];When setting this property at design-time in the Object Inspector the Tree View Items Editor appears. Use the New Item and New SubItem buttons to add items to the tree view. Use the Text property to modify what text is displayed in the label of the item.At run-time nodes can be added and inserted by using the TTreeNodes methods AddChildFirst, AddChild, AddChildObjectFirst, AddChildObject, AddFirst, Add, AddObjectFirst, AddObject, and Insert.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, Grids, DBGrids, DB, ExtCtrls, ImgList, ADODB,
StdCtrls; //该结构保存数据的节点信息
type
PNodeInfor=^TNodeInfor;
TNodeInfor=Record
KeyId:string[10];
FParentID:string[10];
FName:string;
// IsEnd:Boolean;
// IsCanDel:Boolean;
end;
//创建TreeView
function CreateATree(var TreeView:TTreeView;const adoData:TADOTable):boolean;
//创建子接点
function CreateSubNode(var Node:TTreeNode;ParentKey:String;TreeView:TTreeView;
const adoData:TADOTable):Boolean;implementationfunction CreateATree(var TreeView:TTreeView;const adoData:TADOTable):boolean;
var
tmpTree:TTreeView;
tmpItems:TTreeNodes;
tmpNode:TTreeNode;
tmpNodeInfor:PNodeInfor;
tmpBookMark:String;
begin
Result:=False;
tmpNode:=TTreeNode.Create(nil);
tmpTree:=TreeView;
tmpItems:=tmpTree.Items;
tmpItems.Clear;{清除当前所有节点}
if (not adoData.Active)or(adoData.RecordCount<=0) then
begin
Application.MessageBox('数据表中没有数据!','提示',mb_ok+mb_iconwarning);
Exit;
end;
with adoData do
begin
First;
New(tmpNodeInfor);
tmpNodeInfor.KeyId:=Trim(FieldByName('己编码').AsString);
tmpNodeInfor.FParentID:=Trim(FieldByName('父编码').AsString);
tmpNodeInfor.FName:=Trim(FieldByName('名称').AsString);
// tmpNodeInfor.IsEnd:=FieldByName('FIsEnd').AsBoolean;
// tmpNodeInfor.IsCanDel:=FieldByName('FCanDel').AsBoolean;
while not EOF do
begin
if FieldByName('己编码').AsString=FieldByName('父编码').AsString then
begin
tmpNode:=tmpItems.AddObject(nil,tmpNodeInfor.FName,tmpNodeInfor);
tmpBookMark:=string(BookMark);
if not CreateSubNode(tmpNode,tmpNodeInfor.KeyId,TreeView,adoData) then
begin
Exit;
end;
BookMark:=tmpBookMark;
Next;
end
else
Next;
end;
end;
adoData.First;
Result:=true;
end;function CreateSubNode(var Node:TTreeNode;ParentKey:String;TreeView:TTreeView;
const adoData:TADOTable):Boolean;
var
tmpTree:TTreeView;
tmpItems:TTreeNodes;
tmpNodeSub:TTreeNode;
tmpNodeInfor:PNodeInfor;
tmpBookMark:String;
FID:string;
begin
Result:=False;
tmpTree:=TreeView;
tmpItems:=tmpTree.Items;
FID:=ParentKey;
tmpNodeSub:=TTreeNode.Create(nil);
with adoData do
begin
First;
while not EOF do
begin
New(tmpNodeInfor);
tmpNodeInfor.KeyId:=Trim(FieldByName('己编码').AsString);
tmpNodeInfor.FParentID:=Trim(FieldByName('父编码').AsString);
tmpNodeInfor.FName:=Trim(FieldByName('名称').AsString);
// tmpNodeInfor.IsEnd:=FieldByName('FIsEnd').AsBoolean;
// tmpNodeInfor.IsCanDel:=FieldByName('FCanDel').AsBoolean; if (FieldByName('父编码').AsString=FID)and
(FieldByName('己编码').AsString<>FieldByName('父编码').AsString) then
begin
tmpNodeSub:=tmpTree.Items.AddChildObject(Node,tmpNodeInfor.FName,tmpNodeInfor);
tmpBookMark:=string(BookMark);
if not CreateSubNode(tmpNodeSub,tmpNodeInfor.KeyId,TreeView,adoData) then
Exit;
BookMark:=tmpBookMark;
Next;
end
else
Next;
end;
end;
Result:=True;
end;end.
///////////调用的窗体//
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls,UTreeFun, Menus, ActnList;type
TForm1 = class(TForm)
Tree: TTreeView;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
ActionList1: TActionList;
Addmax: TAction;
procedure FormShow(Sender: TObject);
procedure TreeGetSelectedIndex(Sender: TObject; Node: TTreeNode);
procedure TreeCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
State: TCustomDrawState; var DefaultDraw: Boolean);
procedure TreeChange(Sender: TObject; Node: TTreeNode);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
begin
CreateATree(Tree,adoTable1);
end;procedure TForm1.TreeGetSelectedIndex(Sender: TObject; Node: TTreeNode);
begin
//
//showmessage(node.Text);
end;procedure TForm1.TreeCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
//Showmessage(node.Text);
end;procedure TForm1.TreeChange(Sender: TObject; Node: TTreeNode);
begin
//Showmessage(Node.Text);
end;procedure TForm1.N1Click(Sender: TObject);
begin
//
end;end.