想问的是SubNode := Treeview1.Items.AddChild(RootNode, ADOQuery2.fieldbyname('productname').AsString);这一句该怎么写?

解决方案 »

  1.   

    我曾经自己做了一个将表信息(包含等级信息)导入到TTreeView中的方法,如果你需要的话,发邮件给我,我可以把它发给你,我的Email:[email protected]
      

  2.   

    To anybody我已摘定啦。谁有treeview的使用说明,请寄一份给我。一样加分。谢谢!!!
      

  3.   

    Treeview1.Items.AddChild(RootNode, ADOQuery2.fieldbyname('productname').AsString);
    这么写不行吗?
    你说不成功是指程序在运行出现异常还是没有加上子结点?
    对了你将第一个add,也改为addchild;再试试看.
      

  4.   

    说明没有 给你一个例子吧
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, DB, DBTables, ImgList, ExtCtrls, DBCtrls, StdCtrls,
      Mask, Grids, DBGrids;
    const
      cTreeCodeFormat='122222';//
      cTreeMaxLevel=6;
      cTreeRootTxt='单位字典';
    type
      TForm1 = class(TForm)
        tree: TTreeView;
        ImageList1: TImageList;
        Table1: TTable;
        Database1: TDatabase;
        DBEdit1: TDBEdit;
        DBEdit2: TDBEdit;
        DataSource1: TDataSource;
        DBNavigator1: TDBNavigator;
        DBGrid1: TDBGrid;
        procedure Table1NewRecord(DataSet: TDataSet);
        procedure Table1BeforeEdit(DataSet: TDataSet);
        procedure Table1AfterDelete(DataSet: TDataSet);
        procedure Table1AfterInsert(DataSet: TDataSet);
        procedure Table1AfterPost(DataSet: TDataSet);
        procedure Table1AfterEdit(DataSet: TDataSet);
        procedure Table1BeforeDelete(DataSet: TDataSet);
        procedure FormCreate(Sender: TObject);
        procedure treeClick(Sender: TObject);
      private
        { Private declarations }
        mystate,
        gNodeID:string;
        gNode:TTreeNode;
        gNodelevel:integer;
        procedure setFieldMask;    procedure LoadTree(treeDB:TDBDataSet);
        procedure UpdateTree(curNode:TTreeNode;nodeTxt:string;state:string);
        function GetNodeLevel(sFormat,sCode:string):integer;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.setFieldMask;
    var
      i,j:integer;
      maskStr:string;
      setField:TField;
    begin
      setField:=table1.FieldByName('dwbm');
      if (gNodeID<>'') and (gNodelevel<cTreeMaxLevel) then
      begin
        maskStr:='';
        if setField.DataSet.state=dsInsert then
          j:=Length(gNodeID)
        else
          j:=Length(gNodeID)-2;
        for i:=1 to j do
        begin
          maskStr:=maskStr+'\'+gNodeID[i];
        end;
        setField.EditMask:='!'+maskStr+'00;1;?';
      end
      else begin
        setField.DataSet.Cancel;
      end;
    end;procedure TForm1.LoadTree(treeDB:TDBDataSet);
    var
      curID,nodeTxt:string;
      level,chindex,cnode,num:integer;
      mynode:array[0..6]of TTreeNode;
    begin
      Screen.Cursor:=crHourGlass;
      tree.Enabled:=True;
      tree.Items.clear;
      level:=0;
      num:=1;
      mynode[level]:=tree.Items.Add(Tree.TopItem,cTreeRootTxt);
      mynode[level].ImageIndex:=1;
      with treeDB do
      begin
        try
        if not Active then open;
        first;
        while not EOF do
        begin
          curID:=trim(FieldByName('dwbm').AsString );
          nodeTxt:=curID+'-'+trim(FieldByName('dwmc').AsString );
          level:=GetNodeLevel(cTreeCodeFormat,curID);
          if level>0 then
          begin
            mynode[level]:=tree.Items.addchild(mynode[level-1],nodeTxt);
            mynode[level].ImageIndex:=2;      end;
          next;
        end;
        finally
          close;
        end;
        mynode[0].Expand(False);
        Screen.Cursor:=crDefault;
      end;
    end;procedure TForm1.UpdateTree(curNode:TTreeNode;nodeTxt:string;state:string);
    begin
      if state='add' then
      begin
        curNode:=tree.Items.AddChild(curNode,nodeTxt);
        curNode.ImageIndex:=2;
      end;
      if state='del' then curNode.Delete;
      if state='edi' then curNode.Text:=nodeTxt;end;function TForm1.GetNodeLevel(sFormat,sCode:string):integer;
    var
      i,level,iLen:integer;
    begin
      level:=-1;
      iLen:=0;
      if (sFormat<>'') and (sCode<>'')  then
      begin
        for i:=1 to Length(sFormat) do
        begin
          iLen:=iLen+StrToInt(sFormat[i]);
          if Length(sCode)=iLen then
          begin
            level:=i;
            break;
          end;
        end;
        result:=level;
      end;
    end;procedure TForm1.Table1NewRecord(DataSet: TDataSet);
    begin
      setFieldMask;
    end;procedure TForm1.Table1BeforeEdit(DataSet: TDataSet);
    begin
      setFieldMask;
    end;procedure TForm1.Table1AfterDelete(DataSet: TDataSet);
    begin
      UpdateTree(gNode,'','del'); 
    end;procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
    begin
      mystate:='add';
    end;procedure TForm1.Table1AfterPost(DataSet: TDataSet);
    var
      nodetext:string;
    begin
      nodetext:=table1.fieldbyName('dwbm').Text+'-'+table1.fieldByName('dwmc').Text;
      if mystate='add' then
        UpdateTree(gNode,nodetext,mystate);
      if mystate='edi' then
        UpdateTree(gNode,nodetext,mystate);  mystate:='edi';
      table1.Refresh;
    end;procedure TForm1.Table1AfterEdit(DataSet: TDataSet);
    begin
      mystate:='edi';
    end;procedure TForm1.Table1BeforeDelete(DataSet: TDataSet);
    begin
      if Application.MessageBox('确定要删除?','操作提示',
        MB_OKCANCEL)<>IDOK then table1.cancel;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      table1.DatabaseName:='C:\My Documents\treeview';
      LoadTree(table1);
    end;procedure TForm1.treeClick(Sender: TObject);
    var
      temp,recID:string;
      n,m:integer;
      curLevel:integer;begin
      gNode:=tree.Selected;
      n:=Pos('-',gNode.text)-1;
      recID:=copy(gNode.text,1,n);
      gNodeID:=recID;
      if gNode.text<>'单位字典' then
      begin
        if recID<>'' then
        begin
          with table1 do
          begin
            open;
            active:=true;
            FindNearest([recID]);
          end;
          curLevel:=getNodeLevel(cTreeCodeFormat,recID)+1;
        end
        else
          curLevel:=1;
      end;
      gNodelevel:=curLevel;
    end;end.
      

  5.   

    To anybody如何给子结点付string值?