表1:
dwdm dwmc
10 aa
11 bb.......
表2:
dwdm bmdm bmmc
10 01 aaa
10 02 aaaa
11 01 bbb
11 02 bbbb
11 03 bbbbb.....
如何让数据显示成这个结果,谢谢了,分不够再加,急.在线等.......
aa
aaa
aaaa
bb
bbb
bbbb
bbbbb
dwdm dwmc
10 aa
11 bb.......
表2:
dwdm bmdm bmmc
10 01 aaa
10 02 aaaa
11 01 bbb
11 02 bbbb
11 03 bbbbb.....
如何让数据显示成这个结果,谢谢了,分不够再加,急.在线等.......
aa
aaa
aaaa
bb
bbb
bbbb
bbbbb
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, ImgList, Db, ComCtrls, ToolWin, ExtCtrls, frameSubRight,
fraDetail,PubVar;
type
TFrameTree = class(TFrame)
Splitter1: TSplitter;
Panel1: TPanel;
Tree: TTreeView;
Panel2: TPanel;
FrameDetail1: TFrameDetail;
private
public
procedure LoadTree(treeDB:TDBDataSet);//初始化树
procedure UpdateTree(curNode:TTreenode; nodeTxt:string; state:string);//更新树
function GetNodeLevel(sFormat,sCode:string):integer;
//获得节点层数
end;
implementation
{$R *.DFM}
procedure TFrameTree.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;
tree.items.clear;
//设置根节点
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('dwqc').AsString);
level:=GetNodeLevel(cTreeCodeFormat,curID);
//这里返回代码的层次数
if level>0 then
begin
//增加下一节点时,用添加子节点的方法可轻松实现节点间的层次关系
//注意:这里的父节点是用当前节点的上一级节点mynode[level-1]
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:=crHourGlass;
end;
end;
function TFrameTree.GetNodeLevel(sFormat,sCode:string):integer;
var i,level,iLen:integer;
begin
level:=-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;
//以下过程在新增、删除、修改记录时,同步更新树形结构
procedure TFrameTree.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;
end.
var
sname:string;
currname:string;
id:string;
currid:string;
begin
ADODataSet1.Active := false;
adodataset1.CommandText := 'select idno,previdno,idname from TdgTest1 where previdno=' +
QuotedStr(pid);
adodataset1.active := true; while not adodataset1.Eof do
begin
sname := adodataset1.fieldbyname('idname').asString;
currname :=trim(sname);
ANode :=Treeview1.items.addchild(anode,currname);
id :=adodataset1.fieldbyname('idno').AsString;
currid := id;
createTree(Anode,id);
ANode :=ANode.parent; adodataset1.active := false;
adodataset1.commandtext :=
'select * '#13#10 +
'from TdgTest1 '#13#10 +
'where previdno=' + QuotedStr(pid);
adodataset1.active := true;
adodataset1.locate('idno',currid,[locaseinsensitive]);
adodataset1.next;
end;
end;procedure TForm1.Button1Click(Sender: TObject);var
t:TTreeNode;
id:string;
begin
t := nil;
id := '001';
TreeView1.Items.Clear;
createTree(t,id);
TreeView1.SetFocus;
end;end.idno,previdno,idname
002 001 部门
003 002 人员
004 003 张,
你可以参照一个,以前做的,没有时间改你的,
edit2.text:=tree.Selected.Parent.Text;
edit1.text:=tree.selected.text;
这个的语句选中的是父节点,则程序出错,应该怎么写?
if tree.selected.parent<>nil then edit2.text:=tree.Selected.Parent.Text;