数据库结构:
ID PID Caption
1 0 aaa
2 1 abb
3 1 abc
4 2 abbc数据库的表已经建好,但是不会写Delphi部分代码,请高手发布一下代码,最好是完整代码,整个Form全部Copy上,包括结构声明部分,最好是所有功能都写在同一个Form中,稍做修改就能够运行的,急用.谢谢高手
ID PID Caption
1 0 aaa
2 1 abb
3 1 abc
4 2 abbc数据库的表已经建好,但是不会写Delphi部分代码,请高手发布一下代码,最好是完整代码,整个Form全部Copy上,包括结构声明部分,最好是所有功能都写在同一个Form中,稍做修改就能够运行的,急用.谢谢高手
1:是不是要在treenode的结构指里里存放数据库记录的键值
如果是的话就像下面那样了
procedure TBqLeaveFrm.InitTV;
var
I:Integer;
begin
for I:=0 to TV.Items.Count-1 do
begin
Dispose(TV.Items[i].Data);
TV.Items[I].Data:=nil;
end;
TV.Items.Clear;
end;
procedure TBqLeaveFrm.LoadTV;
var
ParentNode,Node : TTreeNode;
BeInHospital_No:^integer;
SickName:string;
begin
InitTV;
if FQuery_TV.Active then
FQuery_TV.Close;
FQuery_TV.SQL.Clear;
FQuery_TV.SQL.Add('select beinhospital_no,sick_name,sex,bq_section_id ');
FQuery_TV.SQL.Add('from bq_sick_basic_mis nolock ');
FQuery_TV.SQL.Add('where bq_square_indicate=0 and bq_section_id=:Bq_Section_Id');
FQuery_TV.Parameters.ParamByName('Bq_Section_Id').Value:=HisObj.CurrentSectionNo;
FQuery_TV.Open;
FQuery_TV.First;
TV.Items.BeginUpdate;
ParentNode:=TV.Items.Add(Nil,HisObj.CurrentSectionName);
ParentNode.ImageIndex:=2;
ParentNode.SelectedIndex:=2;
while not FQuery_TV.Eof do
begin
New(BeInHospital_No);
SickName:=FQuery_TV['sick_name'];
BeInHospital_No^:=FQuery_TV['beinhospital_no'];
Node:=TV.Items.AddChildObject(ParentNode,SickName,BeInHospital_No);
if Trim(FQuery_TV['sex'])='男' then
begin
Node.ImageIndex:=1;
Node.SelectedIndex:=1;
end
else
begin
Node.ImageIndex:=0;
Node.SelectedIndex:=0;
end;
FQuery_TV.Next;
end;
TV.TopItem.Expand(True);
TV.Items.EndUpdate;
end;取出来用
procedure TBqLeaveFrm.TVDblClick(Sender: TObject);
var
TN:TTreeNode;
BeInHospital_No:integer;
begin
if TV.Items.Count=0 then
begin
Application.MessageBox('此病区未有病人在院!','错误提示',MB_OK);
Exit;
end;
if TV.Selected=Nil then
begin
Application.MessageBox('请选择要办理病区出院的病人!','错误提示',MB_OK);
Exit;
end;
if TV.Selected.Parent=Nil then
Exit;
TN:=TV.Selected;
BeInHospital_No:=Integer(TN.Data^);
Get_MedicineMis(BeInHospital_No);
Btn_Preview.Enabled:=True;
Btn_Print.Enabled:=True;
Btn_ConfirmLeaveBq.Enabled:=True;
TV.Enabled:=False;
看看这个吧!
楼主要自己写sql创建结点.procedure TForm1.FormShow(Sender: TObject);
var
q1,q2:tadoquery;
i,j:integer;
nodeo,nodep:ttreenode;
sid:psid;
begin
treeview1.Items.Clear;
q1:=tadoquery.Create(nil);
q1.Connection :=adoconnection1;
q1.Close;
q1.SQL.Add('select dep from dept ');
q1.Open;
q2:=tadoquery.Create(nil);
q2.Connection :=adoconnection1;
q1.First;
if not q1.Eof then
treeview1.AutoExpand :=true;
treeview1.ReadOnly :=true;
nodeo:=treeview1.items.AddFirst(nil,'测试');
for i := 0 to q1.RecordCount - 1 do
begin
nodep:=treeview1.Items.AddChild(nodeo,q1.FieldByName('dep').AsString );
q2.Close;
q2.SQL.Clear;
q2.SQL.Add('select id,stano,name,ename from t_user where cast(dep as varchar(10))='''+q1.fieldbyname('dep').AsString +''' ' );
q2.Open;
q2.First ;
if not q2.Eof then
for j := 0 to q2.RecordCount - 1 do
begin
treeview1.Items.AddChildObject(nodep,q2.FieldByName('name').AsString,nil);
q2.Next;
end;
q1.Next ;
end;
q1.Free;
q2.Free;
end;
数据库结构要增加字段,记录父结点ID:
ID PID Caption FatherID
1 0 aaa
2 1 abb 1
3 1 abc 2
4 2 abbc 2
通过编写一个读取数据库文件的方式,即可实现TreeView与数据库的关联。
也可以根据节点,查询数据库,显示出来