我的一段例程,
慢慢看。
CTreeView::OnInitialUpdate();
 //成员变量
m_imageState.Create( IDB_STATE, 13, 1, RGB(255,255,255) );//创建ImageList

GetTreeCtrl().SetImageList( &(m_imageState), TVSIL_STATE );//在TreeList中加入表示状态的ImageList。 HTREEITEM p_pItem,p_pItem1,p_pItem2,p_pItem3; 
GetTreeCtrl().DeleteAllItems();

p_pItem=GetTreeCtrl().InsertItem("进程管理",NULL,NULL);
GetTreeCtrl().SetItemData(p_pItem,DEFMGM_TRANPROCALL);
GetTreeCtrl().SetItemImage(p_pItem,1,1);
//GetTreeCtrl().SetItemState( p_pItem, INDEXTOSTATEIMAGEMASK( 1),
  // TVIS_STATEIMAGEMASK );
        
p_pItem1=GetTreeCtrl().InsertItem("通信进程管理",NULL,
NULL,p_pItem);
GetTreeCtrl().SetItemData(p_pItem1,DEFMGM_TRANSTATUS); p_pItem2=GetTreeCtrl().InsertItem("业务进程管理",NULL,
NULL,p_pItem);
GetTreeCtrl().SetItemData(p_pItem1,DEFMGM_TRANPROCMAN);
 
p_pItem3=GetTreeCtrl().InsertItem("本端通信进程状态",NULL,
NULL,p_pItem1);
GetTreeCtrl().SetItemData(p_pItem3,DEFMGM_TRANTranStatus);

p_pItem3=GetTreeCtrl().InsertItem("本端通信进程名",NULL,
NULL,p_pItem1);
GetTreeCtrl().SetItemData(p_pItem3,DEFMGM_TRANTranName); p_pItem3=GetTreeCtrl().InsertItem("本端结点号",NULL,
NULL,p_pItem1);
GetTreeCtrl().SetItemData(p_pItem3,DEFMGM_TRANNodeId);

p_pItem3=GetTreeCtrl().InsertItem("对端通信进程状态",NULL,
NULL,p_pItem1);
GetTreeCtrl().SetItemData(p_pItem3,DEFMGM_TRANOpsStatus); p_pItem3=GetTreeCtrl().InsertItem("本端模块ID",NULL,
NULL,p_pItem1);
GetTreeCtrl().SetItemData(p_pItem3,DEFMGM_TRANLocModId); p_pItem3=GetTreeCtrl().InsertItem("对端模块ID",NULL,
NULL,p_pItem1);
GetTreeCtrl().SetItemData(p_pItem3,DEFMGM_TRANOpsModId);

p_pItem3=GetTreeCtrl().InsertItem("是否关闭本端通信进程",NULL,
NULL,p_pItem1);
GetTreeCtrl().SetItemData(p_pItem3,DEFMGM_TRANClsTrans);

解决方案 »

  1.   

    楼上那位老兄,非常感谢,能否将源码mail给我啊,如果能,请mail至:[email protected]
      

  2.   

    在数据库中增加一个字段,指向它的上一节点,这个字段为VARCHAR形,内容可以行如:101(项目一)10101(项目1)
      

  3.   

    你想存到什么样的数据文件中呢?
    不知道你是什么意思?要实现什么功能呀?
    我想你可以在存入的时候把各个层的leve属性保存到同一个字段中。
    然后在读出的时候再做处理就好了。
      

  4.   

    在数据表中有三个字段即可NodeID(节点号),ParentID(父节点号),DisPlayString(显示的字符串)
    从表中读取将DisPlayString读取出来显示在TreeView上的过程为:
    {显示依附于所有根节点的所有子节点过程:
    参数说明:1.Tree  要显示的目标树组件,类型为TTreeView
             2.NodeDataSet  表示存放节点的表,类型为TDataSet
             3.NodeIDField  表示节点表中存放节点ID号的字段名,类型为TString
             4.ParentIDField  表示节点表中存放父节点ID号的字段名,类型为TString
             5.DisplayField  表示节点表中存放要显示在树组件中的文本的字段名,类型为TString}
    procedure DisplayAllSubNodes(Tree:TTreeView;NodeDataName,dbsName:String;NodeIDField,
                                 ParentIDField,DisplayField:String;ParentNode:TTreeNode);
    var
      CurParentNode,OldParentNode:TTreeNode;
      CurParentID:Integer;
      ChildNum:Integer;
      iNode:TTreeNode;
      iData:^Integer;
      tmpQry:TQuery;
    begin
       tmpQry:=TQuery.Create(nil);
      with tmpQry do
      try
        DatabaseName:=dbsName;
        Sql.Add('Select * from '+NodeDataName+' Order by '+NodeIdField);
        Open;
        CurParentNode:=ParentNode;
        Repeat
          CurParentID:=Integer(CurParentNode.Data^);
          ChildNum:=0;
          with tmpQry do begin
            First;
            while not Eof do
            begin
              if FieldByName(ParentIDField).AsInteger=CurParentID then begin
                 iNode:=Tree.Items.AddChild(CurParentNode,FieldByName(DisplayField).AsString);
                 New(iData);
                 iData^:=FieldByName(NodeIDField).AsInteger;
                 iNode.Data:=iData;
                 Inc(ChildNum,1);
              end;
              Next;
            end;
          end;
          OldParentNode:=CurParentNode;
          if ChildNum>0 then begin  //如果当前父节点有子节点则递归执行DisplayAllSubRoad
            CurParentNode:=CurParentNode.GetFirstChild;
            DisplayAllSubNodes(Tree,NodeDataName,dbsName,NodeIDField,ParentIDField,DisplayField,CurParentNode);
          end;
          CurParentNode:=OldParentNode;
          CurParentNode:=CurParentNode.GetNextSibling;
        until CurParentNode=nil;
      finally
        Free;
      end;
    end;能解决你的问题吗?如能请给我加分吧!