加载多级部门代码

来源:互联网 发布:win7系统优化教程 编辑:程序博客网 时间:2024/05/16 19:04
//======================================
//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;
原创粉丝点击