var UnitNode,DepNode,ManNode: TTreeNode; with TreeView do
begin
Items.Clear;
Query1.Close;
Query1.Sql.Text := 'SELECT * FROM 单位';
Query1.Open;
while not Query1.Eof do
begin
UnitNode := Items.AddChild(nil,Query1.FieldByName('单位名称').AsString);
Query2.Close;
Query2.Sql.Text := 'SELECT * FROM 部门 WHERE 部门号='''+Query1.FieldByName('部门号')+'''';
Query2.Open;
while not Query2.Eof do
begin
DepNode := Items.AddChild(UnitNode,Query2.FieldByName('部门名称').AsString);
Query3.Close;
Query3.Sql.Text := 'SELECT * FROM 人员表 WHERE 部门号='''+Query2.FieldByName('部门号').AsString+'''';
Query3.Open;
while not Query3.Eof do
begin
ManNode := Items.AddChild(DepNode,Query3.FieldByName('人员名').AsString);
Query3.Next;
end;
Query2.Next;
end;
Query1.Next;
end;
end;
begin
Items.Clear;
Query1.Close;
Query1.Sql.Text := 'SELECT * FROM 单位';
Query1.Open;
while not Query1.Eof do
begin
UnitNode := Items.AddChild(nil,Query1.FieldByName('单位名称').AsString);
Query2.Close;
Query2.Sql.Text := 'SELECT * FROM 部门 WHERE 部门号='''+Query1.FieldByName('部门号')+'''';
Query2.Open;
while not Query2.Eof do
begin
DepNode := Items.AddChild(UnitNode,Query2.FieldByName('部门名称').AsString);
Query3.Close;
Query3.Sql.Text := 'SELECT * FROM 人员表 WHERE 部门号='''+Query2.FieldByName('部门号').AsString+'''';
Query3.Open;
while not Query3.Eof do
begin
ManNode := Items.AddChild(DepNode,Query3.FieldByName('人员名').AsString);
Query3.Next;
end;
Query2.Next;
end;
Query1.Next;
end;
end;
但是如果记录多的话就可能很慢的
你可以先调第一层的,等鼠标点到某个Node时,再展开下一层
这样相对来说要好一点,速度也行,
关键就是表的设计要体现出层的概念来。
如果用树型表+指针的话确实很酷
ziji jia you a
如单击“下一条”,显示人员表中第二条记录(编号 02 姓名:王红 ),即在树treeview第三层中显示在“王红”上。
别外票票朋友我怎么给你分呀,在哪儿操作呀?
下一条:treeview1.selected.getnext
第一条:treeview1.items.getfirstchild
最后一条:treeview1.items.getlastchild
很方便的
不过你可能需要重新设计库结构
procedure TForm1.ButtonNextClick(Sender: TObject);
var ii: Integer;
begin
ii := TreeView1.Selected.AbsoluteIndex;;
if ii = TreeView1.Items.Count-1 then
begin
ShowMessage('已经到最后了!');
Exit;
end;
ii := ii + 1;
TreeView1.Items[ii].Selected := True;
while (ii<TreeView1.Items.Count) and (TreeView1.Items[ii].Level <> 2) do
begin
Inc(ii);
TreeView1.Items[ii].Selected := True;
end;
end;
和dbguid不同步。
dbtree我有,但要修改数据库。
希望大家好好看看我的要求。
左边是三层树,第一层显示table1中单位字段,第二层显示table2中部门字段,第三层显示table3人员字段。右边是dbgrid,数据源是table3的源datasource3.做几个按钮,实现“上一条记录”“下一条记录”“第一条记录”“最后一条记录”“编辑”“保存”“增加”“删除”刷新”等功能,并且和treeview同步,如第一条记录(编号 01,机关,生产科,王红)下一条记录(编号 01,开关厂,财务科,王强),当单击“下一条”时,treeview显示在节点“王强”上,单击“上一条”时treeview显示在“王红”节点上.