编号     名称     父级ID   所属级数 是否显示
ID       NAME     FATHER   SLEVEL   SLIST
01 三巾 0 1 0
0101 方巾 01 2 1
0102 毛巾 01 2 1
0103 浴巾 01 2 1
02 床品 0 1 0
0201 好梦多 02 2 1
0202 欧莱丝 02 2 1
0203 枕套 02 2 1
0204 床单 02 2 1
以上是数据,想让它显示在Treeview里面,表名SPLB
谁能帮我提供源码,谢了
急用

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2281/2281015.xml?temp=5.077541E-03
    后来又把第一个方法该了一下,如下:
    procedure  TForm1.newtreeview(Node:TTreeNode;ParentID:integer);
    var
      tmpNode : TTreeNode;
      ADOquery1 : TADOQuery;
      p : PMyrecord;
    begin
      ADOQuery1 := TADOQuery.Create(self);
      ADOQuery1.Connection := ADOConnection1;
      ADOQuery1.close;
      ADOQuery1.SQL.clear;
      ADOQuery1.SQL.Text := 'select * from ²¿Ãűí where Éϼ¶²¿ÃÅID='+inttostr(ParentID);
      ADOQuery1.open;
      if ADOQuery1.recordcount > 0  then
      begin
        ADOQuery1.First;
        while not ADOQuery1.Eof do
        begin
          new(p);
          p.ID := ADOQuery1.FieldByName('ID').AsInteger;
          p.name := ADOQuery1.FieldByName('²¿ÃÅÃû³Æ').AsString;
          p.ParentID := ADOQuery1.FieldByName('Éϼ¶²¿ÃÅID').AsInteger;
          tmpNode := TreeView1.Items.AddChildObject(Node,p.name,p);
          Newtreeview(tmpNode,ADOQuery1.FieldByName('ID').AsInteger);
          ADOQuery1.next;
          //dispose(p);//Ò»¶¨ÒªÈ¥µôÕâÌõÓï¾ä£¬²»È»µÄ»°£¬TreeviewÖеÄDataÒ²±»disposeµôÁË¡£
        end;
      end;
      ADOQuery1.Free;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Treeview1.Items<>nil then
        Treeview1.Items.Clear;
      newtreeview(nil,ADOTable1.FieldByName('&Eacute;&Iuml;&frac14;&para;&sup2;&iquest;&Atilde;&Aring;ID').AsInteger);
    end;
      

  2.   

    这么都是乱码!
    procedure  TForm1.newtreeview(Node:TTreeNode;ParentID:integer);
    var
      tmpNode : TTreeNode;
      ADOquery1 : TADOQuery;
      p : PMyrecord;
    begin
      ADOQuery1 := TADOQuery.Create(self);
      ADOQuery1.Connection := ADOConnection1;
      ADOQuery1.close;
      ADOQuery1.SQL.clear;
      ADOQuery1.SQL.Text := 'select * from 部门表 where 上级部门ID='+inttostr(ParentID);
      ADOQuery1.open;
      if ADOQuery1.recordcount > 0  then
      begin
        ADOQuery1.First;
        while not ADOQuery1.Eof do
        begin
          new(p);
          p.ID := ADOQuery1.FieldByName('ID').AsInteger;
          p.name := ADOQuery1.FieldByName('部门名称').AsString;
          p.ParentID := ADOQuery1.FieldByName('上级部门ID').AsInteger;
          tmpNode := TreeView1.Items.AddChildObject(Node,p.name,p);
          Newtreeview(tmpNode,ADOQuery1.FieldByName('ID').AsInteger);
          ADOQuery1.next;
          //dispose(p);//一定要去掉这一句话,不然的话,Treeview中的Data也被dispose掉了
        end;
      end;
      ADOQuery1.Free;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Treeview1.Items<>nil then
        Treeview1.Items.Clear;
      newtreeview(nil,ADOTable1.FieldByName('上级部门ID').AsInteger);
    end;
      

  3.   

    还有一个自定义类型
    type
      PMyrecord = ^Myrecord;
      Myrecord = record
               ID : integer;
               name:string;
               ParentID : integer;
               end;//end of record