首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

动态生成树结合DBgird显示记录解决办法

2013-01-26 
动态生成树结合DBgird显示记录现有Ta,Tb,Tc三个表,三个DBGird,一个TreeView, 1.DBGird_A使用Ta,根据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,依次类推
[解决办法]



不是很理解第三点,看着有点晕 
在点击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时,你是如何关联的?这个是你解决问题的关键!

热点排行