数据表设计如下:code, parent_code, name
请问用delphi如何编写出一个产品的结构树,比如
电脑
|主机
| CPU
显卡
内存
|显示器
外壳
阴极射线管
请高手帮忙,给出一段程序,不胜感激
请问用delphi如何编写出一个产品的结构树,比如
电脑
|主机
| CPU
显卡
内存
|显示器
外壳
阴极射线管
请高手帮忙,给出一段程序,不胜感激
解决方案 »
- 100分求表的关联.谢了.
- 如何控制Dbgrid中的前两列不受水平滚动条的限制?
- 间隔一段时间扫描一下数据库 能不能变成启发式?
- 高分求加密算法!!!
- 请猛禽接分 原帖http://expert.csdn.net/Expert/topic/2368/2368797.xml?temp=.1806757
- 如何在程序中打开文件?
- 关于打印设置的问题,急!在线等待
- [SQL]如何在打开数据库时显示打开进度?
- 求助问题,只知道菜单控件TMuneItem的Caption 怎样写禁掉该TMuneItem方法
- delphi5开发接收邮件TNMPOP3,收到的附件ZIP文件打不开,如何解决?
- 如何调用网站的时间?
- 有需要免费帮手的吗?兄弟现在干的不对口,但又对编程感兴趣,有大把的时间,各位有什么我能干的活给我说一声,我免费干!
第一遍先都添加作为根节点,第二遍按照parent_code找到父节点。
有人给出过具体代码,可我找不到了,不然可以给你链接。
因為我也正在研究
有問題我可能幫不了你..因為我也不懂
只能給你參考的範例
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function ConnectIonDataBase:Boolean;
function GetAdoQuery(sSql:String):TADOQuery; Procedure FindLeechDom(Leechdomname: String;node: TTreeNode);
end;var
Form1: TForm1;implementation{$R *.dfm}function TForm1.ConnectIonDataBase: Boolean;
begin
// try connect adoConn to database
Result := false;
ADOConnection1.Close;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ExtractFilePath( Application.ExeName) + '\test1.mdb;Persist Security Info=False';
try
ADOConnection1.Open;
Result := true;
except
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var q:TADOQuery;
o,temp: TTreeNode;
begin
if ConnectIonDataBase then
begin
TreeView1.Items.Add(nil,'MTYPE'); q := GetAdoQuery('SELECT * FROM LEECHDOM WHERE MCODE IS NULL '); while not q.Eof do
begin
temp := TreeView1.Items.AddChild( TreeView1.Items[0],q.FieldByName('MTYPE').AsString);
FindLeechDom(q.FieldByName('MTYPE').AsString ,temp);
q.Next;
end;
q.Close;
q.Free;
end;
end;function TForm1.GetAdoQuery(sSql: String): TADOQuery;
var q:TADOQuery;
begin
try
q := TADOQuery.Create(nil);
q.Connection := ADOConnection1;
q.Close;
q.SQL.Text := sSql;
q.Open;
Result := q;
except
on E:Exception do
Raise e;
end;
end;procedure TForm1.FindLeechDom(Leechdomname: String; node: TTreeNode);
var
temp: TADOQuery;
node1: TTreeNode;
begin
Try
temp :=GetAdoQuery('SELECT * FROM LEECHDOM WHERE MCODE='+QuotedStr(Leechdomname)); while Not Temp.Eof do
begin
node1 := TreeView1.Items.AddChild(node,temp.FieldByName('MTYPE').AsString);
FindLeechDom(temp.FieldByName('MTYPE').AsString,node1);
temp.Next;
end;
Finally
temp.Close;
temp.Free;
end;
end;end.
如果你研究出來...也希望能指教我一下啊~catnode:=treeview1.items.add(nil,'所有商品');
with adoquery1 do begin
close;
sql.clear;
sql.add('select longid,text from tree..testtree order by longid');
open;
first;
while not adoquery1.eof do begin
cat1node:=treeview1.Items.AddChild(catnode,adoquery1.fieldbyname('text').value+'('+adoquery1.fieldbyname('longid').value+')');
//treeview1.Items.Item[0].Expanded:=true;
with adoquery3 do begin
close;
sql.Clear;
sql.Add('select distinct * from node where left(node.names,2)=:aa order by names');
adoquery3.Parameters.ParamByName('aa').value:=copy(adoquery1.fieldbyname('longid').value,1,2);
open;
first;
while not adoquery3.Eof do begin
treeview1.Items.AddChild(cat1node,'('+adoquery3.fieldbyname('names').value+')'+adoquery3.fieldbyname('ide').value);
next;
//treeview1.Items.Item[1].Expanded:=true;
end;
end;
next;
end;
end;procedure TForm1.TreeView1Click(Sender: TObject);
begin
if treeview1.Selected.Level=1 then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.add('select * from tree..testtree where longid=:aa');
adoquery1.Parameters.ParamByName('aa').Value:=copy(treeview1.Selected.Text,4,2);
showmessage(copy(treeview1.Selected.Text,4,2));
adoquery1.open;
edit1.text:=adoquery1.fieldbyname('longid').value;
edit2.text:=adoquery1.fieldbyname('text').value;
//treeview1.Selected:=nil;
//edit1.text:=treeview1.Selected.Text;
end;
if treeview1.Selected.Level=2 then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select* from tree..node where names=:aa');
adoquery1.Parameters.ParamByName('aa').Value:=copy(treeview1.Selected.Text,2,4);
showmessage(copy(treeview1.Selected.Text,2,4));
adoquery1.Open;
edit1.Text:=treeview1.Selected.Parent.Text;
edit2.Text:='';
edit3.Text:=adoquery1.FieldValues['names'];
edit4.Text:=adoquery1.FieldValues['ide'];
end;
end;