动态生成树。我可不是来枪分啊!
procedure TPublicClass.TreeViewAddT(MFieldStr, DFieldStr,
TableNameValue: String; Sender: TTreeView; ImageValue: TImageList);
var
PNode , CNode : TTreeNode;
I : Integer;
begin
Sender.Items.Clear;
Sender.Images := ImageValue;
With DataModuleFrm.Temp1ADOQuery do
begin
if Active then
Active := False;
SQL.Clear;
SQL.Add('Select Distinct ' + MFieldStr + ' from ' + TableNameValue);
Prepared;
Open;
First;
While Not Eof do
begin
PNode := Sender.Items.AddChild(Nil,Trim(FieldByName(MFieldStr).AsString));
PNode.ImageIndex := 0;
if PNode.Level = 1 then
begin
PNode.ImageIndex := 2;
Pnode.StateIndex := 4;
end; {}
Next;
end;
end;
With DataModuleFrm.LSB_ADOQuery do
begin
Sender.SetFocus;
For I := Sender.Items.Count -1 DownTo 0 do
begin
PNode := TTreeNode.Create(Nil);
PNode := Sender.Items[I];
if Active then
Active := False;
SQL.Clear;
SQL.Add('Select ' + DFieldStr + ' from ' + TableNameValue + ' Where ' +
MFieldStr + ' = ' + #39 + Sender.Items[I].Text + #39);
Prepared;
Open;
First;
While Not Eof do
begin
CNode := Sender.Items.AddChild(PNode,Trim(FieldByName(DFieldStr).AsString));
CNode.ImageIndex := 1;
if PNode.Level = 1 then
begin
PNode.ImageIndex := 2;
Pnode.StateIndex := 4;
end;{}
Next;
end;
end;
end;
改了一下;
function Tthrgzzxbzhwhfrm.ResultString(IntValue : Integer): String;
begin
if IntValue=0 then
Result := FieldName1;//字段1,就是总经理室所对应的FieldName;如部门
if IntVlaue = 1 then
Result := FieldName2;//字段2,就是经理所对应的FieldName ,如职位
end;
function Tthrgzzxbzhwhfrm.ResultString(IntValue : Integer): String;
begin
Case QueryComboBox.ItemIndex of
0 : Result := 'zxbzh';
1 : if IntValue = 0 then
Result := 'zw' else
Result := 'zxbzh';
2 : if IntValue = 0 then
Result := 'zc' else
Result := 'zxbzh';
end;
end;
不知道你是否装有fastReport组件,若装了,在它的demo中有个叫report的文件夹,它的实例程序可以很好的满足你的要求,
其中的关键代码如下:
procedure TForm1.Tree1Change(Sender: TObject; Node: TTreeNode);
var
n: Integer;
begin
n := Node.StateIndex;
if n = -1 then
begin
......
end
else if n = 15 then
begin
.....
end;
with Form2.frReport1 do
begin
LoadFromFile(WPath + IntToStr(n) + '.frf');
if Dictionary.Variables.IndexOf('Description') <> - 1 then
Memo1.Text := Dictionary.Variables['Description'] else
Memo1.Text := '';
DesignBtn.Enabled := True;
PreviewBtn.Enabled := True;
end;
end;
不过,你别忘了在每一个节点中设定一个StateIndex值,自己设定。
procedure TPartyOrgDM.WriteToTreeview(First:boolean;
treename: Ttreeview;Fathernode:Ttreenode;AAString:string);
var childnode:Ttreenode;
BString:string;
query:TAdoquery;
CString:string;
begin
Query:=Tadoquery.Create(owner);
query.Connection:=ADOConnectionDM.ADOConnection1;
query.LockType:=ltReadOnly;
GetInfo(ID);从数据库中取相关信箱
BString:=Adoqry.fieldbyname('A').asstring;
treename.Items.BeginUpdate;
if First then
begin
treename.Items.Clear;
Fathernode:=treename.Items.add(nil,BString); //N级的开始
end;
if DisplayNextOrg(query,AAString) then
begin
while not query.Eof do
begin
CString:=trim(query.fieldbyname('abc').asstring);
if (CString<>'17') and (CString<>'18') then
begin
BString:=query.fieldbyname('B').asstring;
childnode:=treename.Items.addchild(Fathernode,BString); //N+1级
WriteToTreeview(false,treename,childnode,cbname,AString);
end;
query.next;
end;
end;
query.Destroy;
treename.Items.EndUpdate;
end;
2楼的可以 ,加not
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if not Node.HasChildren then
begin
with adoquery do
begin
close;
sql.text:='select * from table where name='''+TreeView1.Selected.Text+'''';
open;
end;
end;
end;
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if Node.HasChildren then
begin
//把它的Text,再把这个Text进数据库里select出来,table或query open一下,DBGrid就显示出来了