function BuildTree(fcTree : TTreeView;cds_DataSet : TClientDataSet;aCodeFld,aNameFld : string;aOtherFld : array of string):Boolean; var strCode, strName : string; curTreeNode : TTreeNode; begin fcTree.Items.BeginUpdate; try curTreeNode := nil; while not cds_DataSet.Eof do begin strCode := cds_DataSet.FieldByName(aCodeFld).AsString; if strCode = '' then begin cds_DataSet.Next; Continue; end; strName := cds_DataSet.FieldByName(aNameFld).AsString; //查找父节点 curTreeNode := GetParentTreeNode(curTreeNode,strCode); if curTreeNode=nil then curTreeNode:=fcTree.Items.GetFirstNode; //增加节点 curTreeNode := fcTree.Items.AddChild(curTreeNode,strName); curTreeNode.StringData := strCode; //取附加内容 cds_DataSet.Next; end; if fcTree.Items.GetFirstNode<>nil then fcTree.Items.GetFirstNode.Expand(false); fcTree.Selected := fcTree.Items.GetFirstNode; finally fcTree.Items.EndUpdate; end; Result := True; end;function GetParentTreeNode(afcTreeNode:TTreeNode;aCode:string):TTreeNode; var strCode : string; begin while afcTreeNode <> nil do begin strCode := afcTreeNode.StringData; if Copy(aCode,1,Length(strCode)) = strCode then Break; afcTreeNode := afcTreeNode.Parent; end; Result := afcTreeNode; end;
function BuildTree(fcTree : TTreeView;cds_DataSet : TClientDataSet;aCodeFld,aNameFld : string;aOtherFld : array of string):Boolean;
var
strCode, strName : string;
curTreeNode : TTreeNode;
begin
fcTree.Items.BeginUpdate;
try
curTreeNode := nil;
while not cds_DataSet.Eof do
begin
strCode := cds_DataSet.FieldByName(aCodeFld).AsString;
if strCode = '' then
begin
cds_DataSet.Next;
Continue;
end;
strName := cds_DataSet.FieldByName(aNameFld).AsString;
//查找父节点
curTreeNode := GetParentTreeNode(curTreeNode,strCode);
if curTreeNode=nil then curTreeNode:=fcTree.Items.GetFirstNode;
//增加节点
curTreeNode := fcTree.Items.AddChild(curTreeNode,strName);
curTreeNode.StringData := strCode;
//取附加内容 cds_DataSet.Next;
end;
if fcTree.Items.GetFirstNode<>nil then
fcTree.Items.GetFirstNode.Expand(false);
fcTree.Selected := fcTree.Items.GetFirstNode;
finally
fcTree.Items.EndUpdate;
end;
Result := True;
end;function GetParentTreeNode(afcTreeNode:TTreeNode;aCode:string):TTreeNode;
var
strCode : string;
begin
while afcTreeNode <> nil do
begin
strCode := afcTreeNode.StringData;
if Copy(aCode,1,Length(strCode)) = strCode then
Break;
afcTreeNode := afcTreeNode.Parent;
end;
Result := afcTreeNode;
end;