unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,db,
ComCtrls, StdCtrls, Buttons, ADODB, ImgList;type
TForm1 = class(TForm)
TreeView1: TTreeView;
BitBtn1: TBitBtn;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
ImageList1: TImageList;
ADOQuery1: TADOQuery;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure DataSetToTreeView(DataSet: TDataSet; var TreeView: TTreeView; NodeRoot: string);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}//==============================================================================
//数据集解构成树****************************************************************
//==============================================================================
procedure Tform1.DataSetToTreeView(DataSet: TDataSet; var TreeView: TTreeView; NodeRoot: string);
var Nodes: array of TTreeNode;
Strs: array of string;
i: integer;
begin
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
with DataSet do
begin
Close;
Open;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetLength(Nodes, FieldCount+1);
SetLength(Strs, FieldCount);
Nodes[0] := TreeView.Items.AddChild(nil, NodeRoot);
for i:=Low(Strs) to High(Strs) do Strs[i] := #255;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
First;
while not Eof do
begin
for i:=Low(Strs) to High(Strs) do
if Strs[i]<>Fields[i].AsString then
begin
Strs[i] := Fields[i].AsString;
Nodes[i+1] := TreeView.Items.AddChild(Nodes[i],Fields[i].AsString);
end;
Next;
end;
Close;
end;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
datasettotreeview(adodataset1,treeview1,'a');
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,db,
ComCtrls, StdCtrls, Buttons, ADODB, ImgList;type
TForm1 = class(TForm)
TreeView1: TTreeView;
BitBtn1: TBitBtn;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
ImageList1: TImageList;
ADOQuery1: TADOQuery;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure DataSetToTreeView(DataSet: TDataSet; var TreeView: TTreeView; NodeRoot: string);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}//==============================================================================
//数据集解构成树****************************************************************
//==============================================================================
procedure Tform1.DataSetToTreeView(DataSet: TDataSet; var TreeView: TTreeView; NodeRoot: string);
var Nodes: array of TTreeNode;
Strs: array of string;
i: integer;
begin
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
with DataSet do
begin
Close;
Open;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetLength(Nodes, FieldCount+1);
SetLength(Strs, FieldCount);
Nodes[0] := TreeView.Items.AddChild(nil, NodeRoot);
for i:=Low(Strs) to High(Strs) do Strs[i] := #255;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
First;
while not Eof do
begin
for i:=Low(Strs) to High(Strs) do
if Strs[i]<>Fields[i].AsString then
begin
Strs[i] := Fields[i].AsString;
Nodes[i+1] := TreeView.Items.AddChild(Nodes[i],Fields[i].AsString);
end;
Next;
end;
Close;
end;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
datasettotreeview(adodataset1,treeview1,'a');
end;
解决方案 »
- 用fastreport的frxPreview控件预览报表时,出现发生下列的错误:List index out of bounds (-1)Stack overflow
- 怎样用代码实现从服务器复制文件到客户端.(服务器端是要通过用户名和密码的)
- 一个SQL语句看起来简单但是怎么也写不出
- [高手求助]谁能提供一个DELPHI与JAVA的相同加密解密源代码
- 急需解答,请问DELPHI中怎么创建一个ACTIVEX DLL,由ASP调用,谢谢!
- 关于-神龙DVD卡-缓冲区播放--有大虾做过请指明
- 窗体继承问题?
- 关于ListBox的问题,急求帮助!
- 向大家问一个函数,请大家指教!!
- 谁有画带尖头的线段的数学模型?
- 一个关于commandtext动态赋值的问题
- 我发布了一个小软件~~http://expert.csdn.net/cnshare/soft/12/12362.shtm
http://www.csdn.net/expert/topic/675/675849.xml?temp=.4498712
其中
//-------------------------------------------------------------------------
// 本子程式为添充TREEVIEW菜单树的子程序。
// 结点.TEXT 为MENU_FILE中的MENU_NAME字段.
// 结点.DATA 为指向一个记录类型.它包括MENU_FILE中一条记录的所有信息.
//-------------------------------------------------------------------------
procedure tmainfrm.filltree(midnode:ttreenode;midfilter:integer);
var
curmidnode:ttreenode;
count:integer;
Pcurrec:pmenu_file;
begin
dmshare.TVmenuQry.filter:='PARENT_ID='+inttostr(midfilter);
dmshare.TVmenuQry.filtered:=true;
dmshare.TVmenuQry.First;
count:=0;
while count<dmshare.TVmenuQry.RecordCount do
begin
inc(count);
new(pcurrec);
pcurrec^.MENU_NODEID :=dmshare.TVmenuQry.fieldbyname('MENU_NODEID').asinteger;
pcurrec^.MENU_NAME :=dmshare.TVmenuQry.fieldbyname('MENU_NAME').asstring;
pcurrec^.PARENT_ID :=dmshare.TVmenuQry.fieldbyname('PARENT_ID').asinteger;
pcurrec^.REMARK :=dmshare.TVmenuQry.fieldbyname('REMARK').asstring;
pcurrec^.MENU_PACKAGE :=dmshare.TVmenuQry.fieldbyname('MENU_PACKAGE').asstring;
if midnode=nil then
curmidnode:=TVmenu.Items.addobject(nil,pcurrec^.MENU_NAME,pcurrec)
else
curmidnode:=TVmenu.Items.addchildobject(midnode,pcurrec^.MENU_NAME,pcurrec);
curmidnode.selectedindex:=0;
curmidnode.ImageIndex :=1;
dmshare.TVmenuQry.Next;
end;end;
var
strsql:string;
begin
trystrsql:='select * from T where NodeType="bs"';
DQ.Active :=false;
DQ.SQL.Clear ;
DQ.SQL.Add(strsql);
DQ.Active :=true;
DQ.Filtered :=true;
DQ.Filter := 'Parent=0';
U_DiGui(0,RzTreeView1.TopItem );//从当前0层开始递归建树
except
showmessage('字典里没有数据!');
end;
end;
procedure TForm5.U_DiGui(parentID:Cardinal;ParentNode:TTreeNode);
var
tmpTBData:array of TableData;
i,j:integer;
tmpNode:TTreeNode;begin
j:=DQ.RecordCount;
setlength(tmpTBData,j);//保存递规上一层结点值
for i:=0 to j-1 do begin
tmpTBData[i].ID := Cardinal(DQ.fieldbyname('ID').value);
tmpTBData[i].Name := DQ.fieldbyname('Name').value;
tmpTBData[i].ParentID := Cardinal(DQ.fieldbyname('Parent').value);
DQ.Next;
end;
for i:=0 to j-1 do begin //递规调用建立所有结点
tmpNode:=RzTreeView1.Items.AddChild(ParentNode,tmpTBData[i].Name);
// tmpNode.ImageIndex:=2;
new(pData);
pData^.ID:=tmpTBData[i].ID;
tmpNode.Data:=pData;
DQ.Filter := 'Parent=' + IntToStr(Integer(tmpTBData[i].ID));
if DQ.RecordCount >0 then begin
U_DiGui(tmpTBData[i].ID,tmpNode );
end;
end;
end;procedure TForm5.FormShow(Sender: TObject);
begin
LoadTreeView;
rzTreeView1.TopItem.Expanded:=true;
end;