//递归,深度优先
procedure TForm1.LoadTreeInfo;
type
TInfo = record
ID, //设备代码
Name, //设备名称
SuperID //上级代码
: string;
end;
var
sql: string;
i, nCount: Integer;
arrInfo: array of TInfo;
NewNode: TTreeNode; //加载一个节点
procedure InitOneNode(ANode: TTreeNode; AId: string);
var
k: Integer;
begin
for k := 0 to length(arrInfo) - 1 do
if arrInfo[k].SuperID = AId then
begin
NewNode := TreeView1.Items.AddChild(ANode, arrInfo[k].Name);
InitOneNode(NewNode, arrInfo[k].ID);
end;
end;begin
TreeView1.Items.BeginUpdate;
TreeView1.Items.Clear; sql := 'select distinct 设备名称,设备代码 from machine_dm order by 设备代码';
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.Open;
nCount := ADOQuery1.RecordCount;
if nCount > 0 then
begin
SetLength(arrInfo, nCount);
for i := 0 to nCount - 1 do
with arrInfo[i] do
begin
ID := Trim(ADOQuery1.FieldByName('设备代码').AsString);
Name := Trim(ADOQuery1.FieldByName('设备名称').AsString);
SuperID := LeftStr(ID, 4); //体现上下级编码规则,不过如果直接有一个上级代码字段,就可以直接取了
ADOQuery1.Next;
end;
end;
ADOQuery1.Close; if nCount > 0 then
begin
InitOneNode(nil, ''); //假设顶级代码为空白
TreeView1.FullExpand;
TreeView1.Items.EndUpdate;
end;
end;不能运行,你能把具体写在什么位置写清楚吗?是不是位置放错了,还是有些地方没有定义,我刚学delphi,请多多指教!
procedure TForm1.LoadTreeInfo;
type
TInfo = record
ID, //设备代码
Name, //设备名称
SuperID //上级代码
: string;
end;
var
sql: string;
i, nCount: Integer;
arrInfo: array of TInfo;
NewNode: TTreeNode; //加载一个节点
procedure InitOneNode(ANode: TTreeNode; AId: string);
var
k: Integer;
begin
for k := 0 to length(arrInfo) - 1 do
if arrInfo[k].SuperID = AId then
begin
NewNode := TreeView1.Items.AddChild(ANode, arrInfo[k].Name);
InitOneNode(NewNode, arrInfo[k].ID);
end;
end;begin
TreeView1.Items.BeginUpdate;
TreeView1.Items.Clear; sql := 'select distinct 设备名称,设备代码 from machine_dm order by 设备代码';
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.Open;
nCount := ADOQuery1.RecordCount;
if nCount > 0 then
begin
SetLength(arrInfo, nCount);
for i := 0 to nCount - 1 do
with arrInfo[i] do
begin
ID := Trim(ADOQuery1.FieldByName('设备代码').AsString);
Name := Trim(ADOQuery1.FieldByName('设备名称').AsString);
SuperID := LeftStr(ID, 4); //体现上下级编码规则,不过如果直接有一个上级代码字段,就可以直接取了
ADOQuery1.Next;
end;
end;
ADOQuery1.Close; if nCount > 0 then
begin
InitOneNode(nil, ''); //假设顶级代码为空白
TreeView1.FullExpand;
TreeView1.Items.EndUpdate;
end;
end;不能运行,你能把具体写在什么位置写清楚吗?是不是位置放错了,还是有些地方没有定义,我刚学delphi,请多多指教!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货