就是类似于Windows中资源管理器,只不过显示的是数据库中的表与字段,谢谢。

解决方案 »

  1.   

    我写的部分代码,只是根节点是固定的,你可以仿照我子节点的方法动态生成根节点并添加,希望对你有用:
    {******************************************************************************}
    {*                    通过读取数据库添加TreeView中的节点                   *}
    {******************************************************************************}
    procedure TFrmsuperiorquest.GetNodesStrs;
    var
        tmpStrYear: String;
        tmpStrTaskCode: String;
        tmpStrTaskName: String;
        vTmp: Variant;
    begin
        with basedatamodule do
        begin
            if not sjxdrwClientDataSet.Active then sjxdrwClientDataSet.Active := True;
            if not rwlxdict.Active then rwlxdict.Active := True;        sjxdrwClientDataSet.First;
            while not sjxdrwClientDataSet.Eof do
            begin
                try
                    tmpStrYear := sjxdrwClientDataSet.FieldByName('任务年度').AsString;
                    if strsYear.IndexOf(tmpStrYear) < 0 then
                        strsYear.Add(tmpStrYear);
                    //在任务类型字典表里查找任务名称
                    tmpStrTaskCode := sjxdrwClientDataSet.FieldByName('任务类型').AsString;
                    vTmp := rwlxdict.lookup('代码',VarArrayOf([tmpStrTaskCode]),'名称');
                    if not (VarType(vTmp) in [varNull]) then
                        tmpStrTaskName := vTmp;
                    if strsTaskType.IndexOf(tmpStrTaskName) < 0 then
                    begin
                        strsTaskType.Add(tmpStrTaskName);
                        if not (VarType(vTmp) in [varNull]) then
                            strsTCFromDic.Append(tmpStrTaskCode);
                    end;
                except
                end;//try
                sjxdrwClientDataSet.Next;
            end;//while
        end;
    end;procedure TFrmsuperiorquest.AddNodes(strsYear, strsTaskType: TStrings);
    var
      treeRootNodeYear, treeRootNodeTask: TTreeNode;
      strsCount : Integer;
    begin
        with treeViewNav.Items do
        begin
            Clear;
            try
                {Add a root node}
                treeRootNodeTask := Add(treeRootNodeYear, '任务类型');
                for strsCount:=0 to strsTaskType.Count-1 do
                    AddChild(treeRootNodeTask, strsTaskType.Strings[strsCount]);
            except
            end;
            try
                { Add another root node }
                treeRootNodeYear := Add(nil, '任务年度');
                { Add a child nodes to the node just added }
                for strsCount := 0 to strsYear.Count-1 do
                    AddChild(treeRootNodeYear, strsYear.Strings[strsCount]);
            except
            end;
        end;      
    end;