我的树结构如下:
…总公司
|
…行政部
…财务部
…分公司
|
…行政部
…财务部
…更多
表结构如下:
AutoId CName FatherId
13 总公司 0
14 行政部 13
16 财务部 13
18 供应部 13
20 分公司 0
21 行政部 20
22 财务部 20
创建树代码如下:
procedure TForm1.AddClass(AId: integer;FatherNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(self);
QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'NetTv.mdb;Persist Security Info=False';
QryTmp.SQL.Add('select * from act');
QryTmp.SQL.Add('where FatherId='+inttostr(AId));
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('CName').AsString); //创建标签,caption存放各分支的AutoId表识
myLabel:=TLabel.Create(self);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('AutoId').AsString;
myNode.Data:=myLabel; AddClass(QryTmp.fieldbyname('AutoId').AsInteger,myNode); //递归调用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
问题:
怎么取“选中的子结点”所对应的编号?
例如:如果点击“分公司->行政部”,怎么知道它对应的'AutoId'?
注意:
若点击“总公司”或“分公司”则不取值
…总公司
|
…行政部
…财务部
…分公司
|
…行政部
…财务部
…更多
表结构如下:
AutoId CName FatherId
13 总公司 0
14 行政部 13
16 财务部 13
18 供应部 13
20 分公司 0
21 行政部 20
22 财务部 20
创建树代码如下:
procedure TForm1.AddClass(AId: integer;FatherNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(self);
QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'NetTv.mdb;Persist Security Info=False';
QryTmp.SQL.Add('select * from act');
QryTmp.SQL.Add('where FatherId='+inttostr(AId));
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('CName').AsString); //创建标签,caption存放各分支的AutoId表识
myLabel:=TLabel.Create(self);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('AutoId').AsString;
myNode.Data:=myLabel; AddClass(QryTmp.fieldbyname('AutoId').AsInteger,myNode); //递归调用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
问题:
怎么取“选中的子结点”所对应的编号?
例如:如果点击“分公司->行政部”,怎么知道它对应的'AutoId'?
注意:
若点击“总公司”或“分公司”则不取值
Node.AddObject(TObject(AutoId));
var s: string;
ParNode: TTreeNode;
begin
if TreeView1.Selected = Nil then Exit;
ParNode := TreeView1.Selected;
s := ParNode.Text;
while ParNode.Parent <> Nil do
begin
ParNode := ParNode.Parent;
s := ParNode.Text + ' --> ' + s;
end;
ShowMessage(s);
end; 根据以上过程,如果你知道了s值(路径),然后再就是一个展开s的过程了
type
TObjectData = class
nItemData:integer;
public
constructor Create();
end;
声明此类的一个对象
tmpObjectData: TObjectData;
tmpObjectData := TObjectData.Create;tmpObjectData.nItemData = AId;
myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('CName').AsString);
改为:myNode:=Treeview1.Items.AddObject(FatherNode,QryTmp.fieldbyname('CName').AsString, tmpObjectData1);
取AID时用
tmpObjectData1 := TObjectData(myNode.Selected.Data)tmpObjectData1.nItemData 即是AID 别忘了在删除结点时释放内存
正在学习delphi能否把完整的代码帖出来,谢谢……