看我的这两个过程
procedure TDM1.FillTreeView(Tree: TObject;tExpLevel:integer;FillChild:boolean;IDItem:TStrings;tExpand:integer);
var
tDT:tADOQuery;
MKLst:tStrings;
MtypeId:string;
procedure CreateSubTree(pMKLst:Tstrings;NodeId: string; Node: TTreeNode = nil;ExpLevel:integer=0;tFC:boolean=true;tIDItem:Tstrings=nil;tEpd:integer=1);
var
iCount:integer;
TreeNode: TTreeNode;
function pGetMKID(Str:string):string;
begin
Result:='';
Result:=Copy(Str,1,Pos('=',Str)-1);
end;
function pGetMPKId(Str:string):string;
var
tStr:String;
begin
Result:='';
tStr:=Copy(Str,Pos('=',Str)+1,Length(Str));
Result:=Copy(tStr,1,Pos('=',tStr)-1);
end;
function pGetMKind(Str:string):string;
var
tStr:String;
begin
Result:='';
tStr:=Copy(Str,Pos('=',Str)+1,Length(Str));
Result:=Copy(tStr,Pos('=',tStr)+1,Length(tStr));
end;
begin
for iCount:=0 to pMKlst.Count-1 do
if NodeId=pGetMPKID(pMKLst[iCount]) then
begin
MTypeId :=pGetMKID(pMKLst[iCount]);
if (Tree is TTreeView) then
TreeNode:= TTreeView(Tree).Items.AddChild(Node, pGetMKInd(pMKLst[iCount]))
else if (Tree is TtcTreeCombobox) then
TreeNode:= TtcTreeCombobox(Tree).Items.AddChild(Node, pGetMKInd(pMKLst[iCount]));
if tIDItem<>nil then
tIDItem.Add(MTypeId);
if (tEpd=0) or (TreeNode.Level<=tEpd) then
TreeNode.Expanded:=true
else
TreeNode.Expanded:=false;
TreeNode.ImageIndex:=1;
TreeNode.SelectedIndex:=0;
if tFC then
CreateSubTree(pMKLst,mTypeId, TreeNode,tExplevel,tFC,tIDItem,tEpd)
else
if (TreeNode.Level<=ExpLevel) then
CreateSubTree(pMklst,mTypeId, TreeNode,tExplevel,tFC,tIDItem,tEpd); // 此处循环递归
if (tEpd=0) or (TreeNode.Level<=tEpd) then
TreeNode.Expanded:=true
else
TreeNode.Expanded:=false;
end;
end;
begin
MKLst:=tStringList.Create;
tDT:=tADOQuery.Create(nil);
tDT.Connection:=adoQytmp.Connection;
with tDT do
try
close;
sql.Text:='select M_K_Id,M_Kind,M_P_K_Id from tblMaterial_Kinds order by M_K_Id';
open;
first;
while not eof do
begin
MKLst.Add(trim(FieldByName('M_K_Id').AsString)+'='+
trim(FieldByName('M_P_K_Id').AsString)+'='+
trim(FieldByName('M_Kind').AsString));
Next;
end;
close;
finally
free;
end;
if IDItem<>nil then
IdItem.Clear;
if Tree is Ttreeview then
begin
TTreeView(Tree).Items.BeginUpdate;
TTreeView(Tree).Items.Clear;
with TTreeView(Tree).Items.Add(nil, '物料类别') do
begin
ImageIndex := 1;
SelectedIndex := 0;
if IDItem<>nil then
IdItem.Add('0');
end;
CreateSubTree(MKLst,'0', TTreeView(Tree).Items[0],tExpLevel,FillChild,IdItem,tExpand);
TTreeView(Tree).Items.EndUpdate;
TTreeView(Tree).Items[0].Selected := True;
TTreeView(Tree).Items[0].Expanded:=true;
end
else if (Tree is TtcTreeCombobox) then
begin
TtcTreeCombobox(Tree).Items.BeginUpdate;
TtcTreeCombobox(Tree).Items.Clear;
with TtcTreeCombobox(Tree).Items.Add(nil, '物料类别') do
begin
ImageIndex := 1;
SelectedIndex := 0;
if IDItem<>nil then
IdItem.Add('0');
end;
CreateSubTree(MKLst,'0', TtcTreeCombobox(Tree).Items[0],tExpLevel,FillChild,IdItem,tExpand);
TtcTreeCombobox(Tree).Items.EndUpdate;
TtcTreeCombobox(Tree).Items[0].Selected := True;
TtcTreeCombobox(Tree).Items[0].Expanded:=true;
end;
MKLst.Free;
end;
//返回选定物料类别的类别代码
function TDM1.Return_M_Kind_ID(Node: TTreeNode): string;
var
Ado_tmp:TADODataset;
sNode:TTreeNode;
begin
sNode:=Node;
if sNode.Parent=nil then
begin
Result:='0';
exit;
end;
try
ADO_tmp:=TADODataset.Create(self);
ADO_tmp.Connection:=adoQyMtype.Connection;
with ADO_tmp do
begin
close;
commandtext:='select * from tblMaterial_Kinds where M_Kind=:QName and M_P_K_ID=:QPid';
parameters.ParamByName('QName').Value:=sNode.Text;
if sNode.Parent=nil then
Parameters.ParamByName('QPid').Value:='0'
else
Parameters.ParamByName('QPid').Value:=Return_M_Kind_ID(sNode.Parent);
open;
Result:=trim(FieldByName('M_K_ID').AsString);
end;
finally
ADO_tmp.Free;
end;
end;