动态生成树组合DBgird显示记录
动态生成树结合DBgird显示记录
现有Ta,Tb,Tc三个表,三个DBGird,一个TreeView,
1.DBGird_A使用Ta,根据DBGird_A里的列生成TreeView的根节点,
2.DBGird_B使用Tb,根据DBGird_B里的列递归生成TreeView的同级子节点。这两个问题已经解决。
3.DBGird_C使用Ta,Tb,Tc,能在展开TreeView的同时显示所有组合查询的情况下显示所有记录,
现在的关键问题是,如何在点击TreeView各子节点的时候,生成相应的DBGird_C行,
比如:点击了TreeView的子节点“房费”,生成查询到的消费类别=房费的相应记录,
点击了TreeView的子节点“餐费”,生成查询到的消费类别=餐费的相应记录!
谁能给给个代码示例啊!
------解决方案--------------------
大致代码,思路是这样的,未做编译
procedure TMainForm.Treeview1Expanded(Sender: TObject; Node: TTreeNode);
begin
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.text := 'select * from table1 where name='+node.text;
for i := 0 to adoquery1.count-1 do
begin
Treeview1.items.addchild(Node,adoquery1.count[i].astring);
end;
end;
------解决方案--------------------
步骤:
1.限度去第一级的记录,然后逐条添加到treeview中,并且为每个node的data属性保存每条记录的id
2.数据集select所有非顶级的记录,然后循环数据集,根据每条记录的上级id,去treevie上循环节点找节点的data值符合条件的node,然后添加childnode,依次类推
------解决方案--------------------
[code=Delphi(Pascal)][/code]
不是很理解第三点,看着有点晕
在点击TreeView时写入你想要的sql,
procedure TreeView1Click(Sender: TObject);
var
str: string;
begin
try
case TreeView1.Selected.Level of
1:
begin
str := 'select * from Tc where name='''+TreeView1.Selected.Text+'''';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(str);
Query1.Open;
DBGird_C.DataSource.DataSet := Query1;
end;
2:
begin
your sql;
end;
end;
except
end;
end;
------解决方案--------------------
由DBGird生成TreeView时,你是如何关联的?这个是你解决问题的关键!
现有Ta,Tb,Tc三个表,三个DBGird,一个TreeView,
1.DBGird_A使用Ta,根据DBGird_A里的列生成TreeView的根节点,
2.DBGird_B使用Tb,根据DBGird_B里的列递归生成TreeView的同级子节点。这两个问题已经解决。
3.DBGird_C使用Ta,Tb,Tc,能在展开TreeView的同时显示所有组合查询的情况下显示所有记录,
现在的关键问题是,如何在点击TreeView各子节点的时候,生成相应的DBGird_C行,
比如:点击了TreeView的子节点“房费”,生成查询到的消费类别=房费的相应记录,
点击了TreeView的子节点“餐费”,生成查询到的消费类别=餐费的相应记录!
谁能给给个代码示例啊!
------解决方案--------------------
大致代码,思路是这样的,未做编译
procedure TMainForm.Treeview1Expanded(Sender: TObject; Node: TTreeNode);
begin
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.text := 'select * from table1 where name='+node.text;
for i := 0 to adoquery1.count-1 do
begin
Treeview1.items.addchild(Node,adoquery1.count[i].astring);
end;
end;
------解决方案--------------------
步骤:
1.限度去第一级的记录,然后逐条添加到treeview中,并且为每个node的data属性保存每条记录的id
2.数据集select所有非顶级的记录,然后循环数据集,根据每条记录的上级id,去treevie上循环节点找节点的data值符合条件的node,然后添加childnode,依次类推
------解决方案--------------------
[code=Delphi(Pascal)][/code]
不是很理解第三点,看着有点晕
在点击TreeView时写入你想要的sql,
procedure TreeView1Click(Sender: TObject);
var
str: string;
begin
try
case TreeView1.Selected.Level of
1:
begin
str := 'select * from Tc where name='''+TreeView1.Selected.Text+'''';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(str);
Query1.Open;
DBGird_C.DataSource.DataSet := Query1;
end;
2:
begin
your sql;
end;
end;
except
end;
end;
------解决方案--------------------
由DBGird生成TreeView时,你是如何关联的?这个是你解决问题的关键!