给你一个列子 function TForm5.LoadCode(crTbl:Ttable):Integer; var NowID,ShowTxt:String;//NOWID 编码,ShowTxt 名称 Level:Integer;//level保存结点级数 MyNode:array[0..2]of TTreeNode;//保存各级节点,最长支持3级(重点) begin Screen.Cursor:=crHourGlass;//设置光标 Level:=0;//初始为最顶点 With crTbl do begin //try if not Active then Open; First; tveCode.Items.Clear; //以下是增加第一项 MyNode[Level]:=tveCode.Items.Add(tveCode.TopItem,SFirstNodeTxt); MyNode[Level].ImageIndex:=0; //设置显示图片 MyNode[Level].SelectedIndex:=1; //以上是增加第一项 While Not Eof do begin NowID:=Trim(FieldByName('aCode').AsString);//保存编码 ShowTxt:=NowID+' '+FieldByName('aName').AsString;//名称 Level:=GetLevel(SCodeFormat,NowID); //返回代码的级数 //以下是增加子项 //以下用上一级节点为父节点添加子节点 if Level>0 then//确保代码符合标准 begin MyNode[Level]:=tveCode.Items.AddChild(MyNode[Level-1],ShowTxt); MyNode[Level].ImageIndex:=1; MyNode[Level].SelectedIndex:=2; end; //以上是增加子项 Next; end; // finally //Close; // end; end; MyNode[0].Expand(False);//将首节点展开 Screen.Cursor:=crDefault; end; //以上函数将Code.db表中的科目代码和科目代码名称显示出来 //下面函数的功能是返回一代码的级数,参数sFormat传递科目代//码结构; //参数sCode传递某一科目代码 function TForm5.GetLevel(sFormat,sCode:String):Integer; var i,Level,iLen:Integer; begin Level:=-1;//如果代码不符合标准,则返回-1 iLen:=0; if (sFormat<>'')and(sCode<>'')then 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; //上面函数的功能是返回一代码的级数调用的时候这样LoadCode(一个table控件),当然,你的表里面应该有一个字段 用类似这样的表示一级001,二级001001,三级001001001
用类似这样的表示一级001,二级001001,三级001001001
我也是按照你的思路来设计的,但我不知道 如何和数据库连接,这个比较不懂,请赐教。