//======================================
//procedure TreeAddChild(Node:TTreeNode;DataSet:TDataSet;KeyName,TextName:string;Sign:integer;ImageIndex,SelectIndex,StateIndex:integer);
//功 能:在树视图中增加主子节点
//参 数:Node:增加到节点
// DataSet:数据集
// KeyName:主键名称
// TextName:显示的字段名称
// Sign:节点标志
// ImageIndex:节点默认图标索引
// SelectIndex:节点选中图标索引
// StateIndex:节点状态图标索引
//返回值:无
//======================================
procedure TreeAddChild(TV:TTreeView;Node:TTreeNode;DataSet:TDataSet;KeyName,TextName:string;Sign:integer;ImageIndex,SelectIndex,StateIndex:integer);
var
AddNode:TTreeNode;
NodeText:String;
i:Integer;
NodePtr:PNodeIntKey;
TempNode:array of TTreeNode;
NodeNum:integer;
DeptNO:string;
begin
if Node = nil then
begin
NodeNum:=0;
with DataSet do
begin
Dataset.Filter:='MasterID=0';
while not Eof do
begin
New(NodePtr);
NodePtr^.KeyID:=FieldByName(KeyName).AsInteger;
NodePtr^.Sign:=Sign;
NodePtr^.SignType:=0;
if KeyName='DeptID' then
begin
DeptNO:=Trim(FieldByName('DeptNO').AsString);
NodeText:='['+DeptNO+']'+Trim(FieldByName(TextName).AsString);
end
else
NodeText:=Trim(FieldByName(TextName).AsString);
AddNode:=TV.Items.AddObject(nil,NodeText,NodePtr);
AddNode.ImageIndex:=ImageIndex;
AddNode.SelectedIndex:=SelectIndex;
AddNode.StateIndex:=StateIndex;
NodeNum:=NodeNum+1;
SetLength(TempNode,NodeNum);
TempNode[NodeNum-1]:=AddNode;
Next;
end;
end;
for i:=0 to NodeNum-1 do TreeAddChild(TV,TempNode[i],DataSet,KeyName,TextName,Sign,ImageIndex,SelectIndex,StateIndex);
end
else begin
if not Node.HasChildren then
begin
with DataSet do
begin
Dataset.Filter:='MasterID='+IntTostr(PNodeIntKey(Node.Data)^.KeyID);
while not Eof do
begin
New(NodePtr);
NodePtr^.KeyID:=FieldByName(KeyName).AsInteger;
NodePtr^.Sign:=Sign;
NodePtr^.SignType:=0;
if KeyName='DeptID' then
begin
DeptNO:=Trim(FieldByName('DeptNO').AsString);
NodeText:='['+DeptNO+']'+Trim(FieldByName(TextName).AsString);
end
else
NodeText:=Trim(FieldByName(TextName).AsString);
AddNode:=Node.Owner.AddChildObject(Node,NodeText,NodePtr);
AddNode.ImageIndex:=ImageIndex;
AddNode.SelectedIndex:=SelectIndex;
AddNode.StateIndex:=StateIndex;
Next;
end;
end;
end;
for i:=0 to Node.Count-1 do TreeAddChild(TV,Node.Item[i],DataSet,KeyName,TextName,Sign,ImageIndex,SelectIndex,StateIndex);
end;
end;
//procedure TreeAddChild(Node:TTreeNode;DataSet:TDataSet;KeyName,TextName:string;Sign:integer;ImageIndex,SelectIndex,StateIndex:integer);
//功 能:在树视图中增加主子节点
//参 数:Node:增加到节点
// DataSet:数据集
// KeyName:主键名称
// TextName:显示的字段名称
// Sign:节点标志
// ImageIndex:节点默认图标索引
// SelectIndex:节点选中图标索引
// StateIndex:节点状态图标索引
//返回值:无
//======================================
procedure TreeAddChild(TV:TTreeView;Node:TTreeNode;DataSet:TDataSet;KeyName,TextName:string;Sign:integer;ImageIndex,SelectIndex,StateIndex:integer);
var
AddNode:TTreeNode;
NodeText:String;
i:Integer;
NodePtr:PNodeIntKey;
TempNode:array of TTreeNode;
NodeNum:integer;
DeptNO:string;
begin
if Node = nil then
begin
NodeNum:=0;
with DataSet do
begin
Dataset.Filter:='MasterID=0';
while not Eof do
begin
New(NodePtr);
NodePtr^.KeyID:=FieldByName(KeyName).AsInteger;
NodePtr^.Sign:=Sign;
NodePtr^.SignType:=0;
if KeyName='DeptID' then
begin
DeptNO:=Trim(FieldByName('DeptNO').AsString);
NodeText:='['+DeptNO+']'+Trim(FieldByName(TextName).AsString);
end
else
NodeText:=Trim(FieldByName(TextName).AsString);
AddNode:=TV.Items.AddObject(nil,NodeText,NodePtr);
AddNode.ImageIndex:=ImageIndex;
AddNode.SelectedIndex:=SelectIndex;
AddNode.StateIndex:=StateIndex;
NodeNum:=NodeNum+1;
SetLength(TempNode,NodeNum);
TempNode[NodeNum-1]:=AddNode;
Next;
end;
end;
for i:=0 to NodeNum-1 do TreeAddChild(TV,TempNode[i],DataSet,KeyName,TextName,Sign,ImageIndex,SelectIndex,StateIndex);
end
else begin
if not Node.HasChildren then
begin
with DataSet do
begin
Dataset.Filter:='MasterID='+IntTostr(PNodeIntKey(Node.Data)^.KeyID);
while not Eof do
begin
New(NodePtr);
NodePtr^.KeyID:=FieldByName(KeyName).AsInteger;
NodePtr^.Sign:=Sign;
NodePtr^.SignType:=0;
if KeyName='DeptID' then
begin
DeptNO:=Trim(FieldByName('DeptNO').AsString);
NodeText:='['+DeptNO+']'+Trim(FieldByName(TextName).AsString);
end
else
NodeText:=Trim(FieldByName(TextName).AsString);
AddNode:=Node.Owner.AddChildObject(Node,NodeText,NodePtr);
AddNode.ImageIndex:=ImageIndex;
AddNode.SelectedIndex:=SelectIndex;
AddNode.StateIndex:=StateIndex;
Next;
end;
end;
end;
for i:=0 to Node.Count-1 do TreeAddChild(TV,Node.Item[i],DataSet,KeyName,TextName,Sign,ImageIndex,SelectIndex,StateIndex);
end;
end;