===============a example============ 假设有数据库Employee(职员表),结构示意入下 empCode char(6), empName varchar(10), empDepart char(6), . . .tv:TTreeView;procedure TEmployeeFrm.CreateTree; var TmpNode1,TmpNode2:TTreeNode; begin tv.Items.Clear; TmpNode1:=tv.Items.Add(nil,'所有职员'); TmpNode1.ImageIndex:=0; TmpNode1.SelectedIndex:=1; with dm.tmpQuery do begin Close; Sql.Clear; Sql.Add('select empDepart from Employee group by empDepart order by empDepart'); Open; while not eof do begin TmpNode2:=tv.Items.AddChild(TmpNode1,FieldByName('empDepart').asstring); TmpNode2.ImageIndex:=0; TmpNode2.SelectedIndex:=1; Next; end; Close; end; tv.FullExpand; end; 该过程建立一个树型结构。
部门是不是多层的,如果是多层的,可以遍历先增加到TREEVIEW中,然后增加人员
procedure Tfrm_ryxx.FormShow(Sender: TObject); var cxbmadoquery:Tadoquery; i:integer; str1:string; begin cxbmadoquery:=Tadoquery.create(application); with cxbmadoquery do begin connection:=DM_GZGS.adocgzgsdb; SQL.Add('select 部门名称 from bmfl'); close; open; str1:=fieldbyname('部门名称').asstring; next; treeview1.Items.AddChild(treeview1.items[2],str1);
for i:=0 to recordcount-2 do begin treeview1.Items.Add(treeview1.items[3+i],fieldbyname('部门名称').asstring); next; end; end;end;(treeview不知道用啊),这是我上面加入部门的代码, 还有部门下面的人员怎么加进去?
to mudeen 还少了一层啊~ ~to千灯,快来拣钱啊,我马上跳楼了,我的口袋,只有三十三块!
别急别急小弟来也! 看看下面一断代码吧也许对你有帮助,思想是这样的从数据库中找出相应的信息把他写入文本文件,然后从文件中导入到treeview中。 procedure TSMSServerDM.GetTreeTable(var FWID: OleVariant;out XJTreeTable, DATreeTable: OleVariant);//构造tree var tblList:TStringList; iCount:Integer; Fanwei,SQLStr:string; begin ADOConnection.Connected:=true; TreeQuery1.Active:=true; TreeQuery2.Active:=true; //////////////////////////////成绩tree Fanwei:=FWID; if Fanwei='00' then SQLStr:='SELECT * FROM xi ORDER BY xi_id' else SQLStr:='SELECT * FROM xi where xi_id='''+Fanwei+''''; with TreeQuery1 do begin Close;SQL.Clear;SQL.Add(SQLStr);Prepared;open; end; //构造TreeQuery1的SQL语句 tblList:=TstringList.Create; try while not TreeQuery1.Eof do begin tblList.Add(TreeQuery1.Fields[0].AsString+TreeQuery1.Fields[1].AsString); with TreeQuery2 do begin Close;SQL.Clear; SQL.Add('SELECT * FROM guanli_chengji WHERE firstname LIKE ''__'+TreeQuery1.Fields[0].AsString+'__'' ORDER BY firstname'); Prepared;open; end; //构造TreeQuery2的SQL语句 while not TreeQuery2.Eof do begin tblList.Add(''#9''+TreeQuery2.Fields[0].AsString+'---'+TreeQuery2.Fields[1].AsString); TreeQuery2.Next; end; TreeQuery1.Next; end; XJTreeTable:= VarArrayCreate([0, tblList.Count - 1], varVariant); for iCount:=0 to tblList.Count-1 do begin XJTreeTable[iCount]:=tblList.Strings[iCount]; end; finally tblList.Free; end; /////////////////////////////////////////档案tree try with TreeQuery1 do begin Close;SQL.Clear;SQL.Add('SELECT tablename FROM guanli_dangan');Prepared;open; end; //构造TreeQuery1的SQL语句 tblList:=TstringList.Create; while not TreeQuery1.Eof do begin tblList.Add(TreeQuery1.Fields[0].AsString); TreeQuery1.Next; end; DATreeTable:= VarArrayCreate([0, tblList.Count-1], varVariant); for iCount:=0 to tblList.Count-1 do begin DATreeTable[iCount]:=tblList.Strings[iCount]; end; finally tblList.Free; end; ///////////////////////////////////////// TreeQuery1.Active:=false; TreeQuery2.Active:=false; ADOConnection.Connected:=false; end; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TMainForm.ConnectButtonClick(Sender: TObject);//导入Tree var XJTreeTable,DATreeTable,JiuYeTable:Variant; XJTreeFile,DATreeFile,JiuyeTreeFile:TextFile; icount:integer; begin MainSocketConnection.AppServer.GetTreeTable(fanwei,XJTreeTable, DATreeTable); /////////////////////////////////// AssignFile(XJTreeFile,'c:\chengji.ini'); ReWrite(XJTreeFile); if (VarIsArray(XJTreeTable))then begin for iCount:=VarArrayLowBound(XJTreeTable,1) to VarArrayHighBound(XJTreeTable,1)do begin Writeln(XJTreeFile,XJTreeTable[iCount]); end; end; CloseFile(XJTreeFile); TreeViewchengji.LoadFromFile('c:\chengji.ini'); ///////////////////////////////// AssignFile(DATreeFile,'c:\dangan.ini'); ReWrite(DATreeFile); if (VarIsArray(DATreeTable))then begin for iCount:=VarArrayLowBound(DATreeTable,1) to VarArrayHighBound(DATreeTable,1)do begin Writeln(DATreeFile,DATreeTable[iCount]); end; end; CloseFile(DATreeFile); TreeViewdangan.LoadFromFile('c:\dangan.ini'); //////////////////////////////////// AssignFile(JiuyeTreeFile,'c:\Jiuye.ini'); ReWrite(JiuyeTreeFile); MainSocketConnection.AppServer.GetJiuyeTable(JiuYeTable); if (VarIsArray(JiuYeTable))then begin for iCount:=VarArrayLowBound(JiuYeTable,1) to VarArrayHighBound(JiuYeTable,1)do begin Writeln(JiuyeTreeFile,JiuYeTable[iCount]); end; end; CloseFile(JiuyeTreeFile); JiuyeTreeView.LoadFromFile('c:\Jiuye.ini'); //////////////////////////////////////// ChjDel.Enabled:=false; DBGrid1.Visible:=false;label1.Caption:='';changebutton.Enabled:=false; SelectButton.Enabled:=false; StudentRepButton.Enabled:=false; ChengjiRepButton.Enabled:=false;ChangeStudentButton.Enabled:=false; ///////////// CreateJiuyeTableButton.Enabled:=true; ChangeJiuyeButton.Enabled:=false; JiuyeDangzhuanRepButton.Enabled:=false; JiuyeBaodaoRepButton.Enabled:=false; CutTable.Enabled:=false; ///////////// TreeConnected:=true; end;
是不是太长了,关键在这里: 一、从数据库中得到信息添加到一个表tblList中(#9是TAB键),TreeQuery2的查询条件是TreeQuery1 的查询结果哦。 with TreeQuery1 do begin Close;SQL.Clear;SQL.Add(SQLStr);Prepared;open; end; //构造TreeQuery1的SQL语句 tblList:=TstringList.Create; try while not TreeQuery1.Eof do begin tblList.Add(TreeQuery1.Fields[0].AsString+TreeQuery1.Fields[1].AsString); with TreeQuery2 do begin Close;SQL.Clear; SQL.Add('SELECT * FROM guanli_chengji WHERE firstname LIKE ''__'+TreeQuery1.Fields[0].AsString+'__'' ORDER BY firstname'); Prepared;open; end; //构造TreeQuery2的SQL语句 while not TreeQuery2.Eof do begin {(***关键哦***)}tblList.Add(''#9''+TreeQuery2.Fields[0].AsString+'---'+TreeQuery2.Fields[1].AsString); TreeQuery2.Next; end; TreeQuery1.Next; end; 二、调用刚才的函数,把返回的信息表写入文件,从文件中调入到TreeViewchengji中。 MainSocketConnection.AppServer.GetTreeTable(fanwei,XJTreeTable, DATreeTable); /////////////////////////////////// AssignFile(XJTreeFile,'c:\chengji.ini'); ReWrite(XJTreeFile); if (VarIsArray(XJTreeTable))then begin for iCount:=VarArrayLowBound(XJTreeTable,1) to VarArrayHighBound(XJTreeTable,1)do begin Writeln(XJTreeFile,XJTreeTable[iCount]); end; end; CloseFile(XJTreeFile); TreeViewchengji.LoadFromFile('c:\chengji.ini');
在CHANAGE事件中用Node: if (Node.Level =i)and(not Node.HasChildren ) then//i:integer; while not ADOQuery.Eof do begin New(PID); PID^:=ADOQuery.FieldByName('ID').AsString ; (TreeView1.Items.AddChild(Node,ADOQuery.FIELDbYnAME('nAME').AsString )) .Data :=PID; ADOQuery.Next ; end; 你在新建是可以将其所在的层数存入数据库中, 在查询时将Levle的只赋给变量i
当添加完部门后,再用循环遍历部门结点,同时用Query动态生成SQL语句选出既是当前部门,又是部门上级结点的在职情况的员工记录,再生成部门的子结点就OK了。
假设有数据库Employee(职员表),结构示意入下
empCode char(6),
empName varchar(10),
empDepart char(6),
.
.
.tv:TTreeView;procedure TEmployeeFrm.CreateTree;
var TmpNode1,TmpNode2:TTreeNode;
begin
tv.Items.Clear;
TmpNode1:=tv.Items.Add(nil,'所有职员');
TmpNode1.ImageIndex:=0;
TmpNode1.SelectedIndex:=1;
with dm.tmpQuery do
begin
Close;
Sql.Clear;
Sql.Add('select empDepart from Employee group by empDepart order by empDepart');
Open;
while not eof do
begin
TmpNode2:=tv.Items.AddChild(TmpNode1,FieldByName('empDepart').asstring);
TmpNode2.ImageIndex:=0;
TmpNode2.SelectedIndex:=1;
Next;
end;
Close;
end;
tv.FullExpand;
end;
该过程建立一个树型结构。
var cxbmadoquery:Tadoquery;
i:integer;
str1:string;
begin
cxbmadoquery:=Tadoquery.create(application);
with cxbmadoquery do
begin
connection:=DM_GZGS.adocgzgsdb;
SQL.Add('select 部门名称 from bmfl');
close;
open;
str1:=fieldbyname('部门名称').asstring;
next;
treeview1.Items.AddChild(treeview1.items[2],str1);
for i:=0 to recordcount-2 do
begin
treeview1.Items.Add(treeview1.items[3+i],fieldbyname('部门名称').asstring);
next;
end; end;end;(treeview不知道用啊),这是我上面加入部门的代码, 还有部门下面的人员怎么加进去?
看看下面一断代码吧也许对你有帮助,思想是这样的从数据库中找出相应的信息把他写入文本文件,然后从文件中导入到treeview中。
procedure TSMSServerDM.GetTreeTable(var FWID: OleVariant;out XJTreeTable, DATreeTable: OleVariant);//构造tree
var
tblList:TStringList;
iCount:Integer;
Fanwei,SQLStr:string;
begin
ADOConnection.Connected:=true;
TreeQuery1.Active:=true;
TreeQuery2.Active:=true;
//////////////////////////////成绩tree
Fanwei:=FWID;
if Fanwei='00' then SQLStr:='SELECT * FROM xi ORDER BY xi_id'
else SQLStr:='SELECT * FROM xi where xi_id='''+Fanwei+'''';
with TreeQuery1 do begin Close;SQL.Clear;SQL.Add(SQLStr);Prepared;open; end; //构造TreeQuery1的SQL语句
tblList:=TstringList.Create;
try
while not TreeQuery1.Eof do
begin
tblList.Add(TreeQuery1.Fields[0].AsString+TreeQuery1.Fields[1].AsString);
with TreeQuery2 do
begin
Close;SQL.Clear;
SQL.Add('SELECT * FROM guanli_chengji WHERE firstname LIKE ''__'+TreeQuery1.Fields[0].AsString+'__'' ORDER BY firstname');
Prepared;open;
end; //构造TreeQuery2的SQL语句
while not TreeQuery2.Eof do
begin
tblList.Add(''#9''+TreeQuery2.Fields[0].AsString+'---'+TreeQuery2.Fields[1].AsString);
TreeQuery2.Next;
end;
TreeQuery1.Next;
end;
XJTreeTable:= VarArrayCreate([0, tblList.Count - 1], varVariant);
for iCount:=0 to tblList.Count-1 do
begin
XJTreeTable[iCount]:=tblList.Strings[iCount];
end;
finally
tblList.Free;
end;
/////////////////////////////////////////档案tree
try
with TreeQuery1 do begin Close;SQL.Clear;SQL.Add('SELECT tablename FROM guanli_dangan');Prepared;open; end; //构造TreeQuery1的SQL语句
tblList:=TstringList.Create;
while not TreeQuery1.Eof do
begin
tblList.Add(TreeQuery1.Fields[0].AsString);
TreeQuery1.Next;
end;
DATreeTable:= VarArrayCreate([0, tblList.Count-1], varVariant);
for iCount:=0 to tblList.Count-1 do
begin
DATreeTable[iCount]:=tblList.Strings[iCount];
end;
finally
tblList.Free;
end;
/////////////////////////////////////////
TreeQuery1.Active:=false;
TreeQuery2.Active:=false;
ADOConnection.Connected:=false;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TMainForm.ConnectButtonClick(Sender: TObject);//导入Tree
var
XJTreeTable,DATreeTable,JiuYeTable:Variant;
XJTreeFile,DATreeFile,JiuyeTreeFile:TextFile;
icount:integer;
begin
MainSocketConnection.AppServer.GetTreeTable(fanwei,XJTreeTable, DATreeTable);
///////////////////////////////////
AssignFile(XJTreeFile,'c:\chengji.ini');
ReWrite(XJTreeFile);
if (VarIsArray(XJTreeTable))then
begin
for iCount:=VarArrayLowBound(XJTreeTable,1) to VarArrayHighBound(XJTreeTable,1)do
begin
Writeln(XJTreeFile,XJTreeTable[iCount]);
end;
end;
CloseFile(XJTreeFile);
TreeViewchengji.LoadFromFile('c:\chengji.ini');
/////////////////////////////////
AssignFile(DATreeFile,'c:\dangan.ini');
ReWrite(DATreeFile);
if (VarIsArray(DATreeTable))then
begin
for iCount:=VarArrayLowBound(DATreeTable,1) to VarArrayHighBound(DATreeTable,1)do
begin
Writeln(DATreeFile,DATreeTable[iCount]);
end;
end;
CloseFile(DATreeFile);
TreeViewdangan.LoadFromFile('c:\dangan.ini');
////////////////////////////////////
AssignFile(JiuyeTreeFile,'c:\Jiuye.ini');
ReWrite(JiuyeTreeFile);
MainSocketConnection.AppServer.GetJiuyeTable(JiuYeTable);
if (VarIsArray(JiuYeTable))then
begin
for iCount:=VarArrayLowBound(JiuYeTable,1) to VarArrayHighBound(JiuYeTable,1)do
begin
Writeln(JiuyeTreeFile,JiuYeTable[iCount]);
end;
end;
CloseFile(JiuyeTreeFile);
JiuyeTreeView.LoadFromFile('c:\Jiuye.ini');
////////////////////////////////////////
ChjDel.Enabled:=false;
DBGrid1.Visible:=false;label1.Caption:='';changebutton.Enabled:=false;
SelectButton.Enabled:=false;
StudentRepButton.Enabled:=false;
ChengjiRepButton.Enabled:=false;ChangeStudentButton.Enabled:=false;
/////////////
CreateJiuyeTableButton.Enabled:=true;
ChangeJiuyeButton.Enabled:=false;
JiuyeDangzhuanRepButton.Enabled:=false;
JiuyeBaodaoRepButton.Enabled:=false;
CutTable.Enabled:=false;
/////////////
TreeConnected:=true;
end;
一、从数据库中得到信息添加到一个表tblList中(#9是TAB键),TreeQuery2的查询条件是TreeQuery1 的查询结果哦。
with TreeQuery1 do begin Close;SQL.Clear;SQL.Add(SQLStr);Prepared;open; end; //构造TreeQuery1的SQL语句
tblList:=TstringList.Create;
try
while not TreeQuery1.Eof do
begin
tblList.Add(TreeQuery1.Fields[0].AsString+TreeQuery1.Fields[1].AsString);
with TreeQuery2 do
begin
Close;SQL.Clear;
SQL.Add('SELECT * FROM guanli_chengji WHERE firstname LIKE ''__'+TreeQuery1.Fields[0].AsString+'__'' ORDER BY firstname');
Prepared;open;
end; //构造TreeQuery2的SQL语句
while not TreeQuery2.Eof do
begin
{(***关键哦***)}tblList.Add(''#9''+TreeQuery2.Fields[0].AsString+'---'+TreeQuery2.Fields[1].AsString);
TreeQuery2.Next;
end;
TreeQuery1.Next;
end;
二、调用刚才的函数,把返回的信息表写入文件,从文件中调入到TreeViewchengji中。
MainSocketConnection.AppServer.GetTreeTable(fanwei,XJTreeTable, DATreeTable);
///////////////////////////////////
AssignFile(XJTreeFile,'c:\chengji.ini');
ReWrite(XJTreeFile);
if (VarIsArray(XJTreeTable))then
begin
for iCount:=VarArrayLowBound(XJTreeTable,1) to VarArrayHighBound(XJTreeTable,1)do
begin
Writeln(XJTreeFile,XJTreeTable[iCount]);
end;
end;
CloseFile(XJTreeFile);
TreeViewchengji.LoadFromFile('c:\chengji.ini');
if (Node.Level =i)and(not Node.HasChildren ) then//i:integer;
while not ADOQuery.Eof do
begin
New(PID);
PID^:=ADOQuery.FieldByName('ID').AsString ; (TreeView1.Items.AddChild(Node,ADOQuery.FIELDbYnAME('nAME').AsString ))
.Data :=PID; ADOQuery.Next ;
end;
你在新建是可以将其所在的层数存入数据库中,
在查询时将Levle的只赋给变量i