我想将数据库中的记录显示在treeview中
数据库表结构为
*node_key int 4 0 节点(自动编号字段)
para_key int 4 1 父节点(指向父节点,如为0则为根节点)
node_name varchar 100 0 节点名称如:
1 0 A
2 1 A-1
3 2 A-2
4 1 B-1
相应树为
A
|-A-1
| |--A-2
|-B-1 应如何写程序啊,在线等待,感谢
数据库表结构为
*node_key int 4 0 节点(自动编号字段)
para_key int 4 1 父节点(指向父节点,如为0则为根节点)
node_name varchar 100 0 节点名称如:
1 0 A
2 1 A-1
3 2 A-2
4 1 B-1
相应树为
A
|-A-1
| |--A-2
|-B-1 应如何写程序啊,在线等待,感谢
解决方案 »
- 我想在delphi的tppreport中加个Label 显示当前页和总页数 不知道怎么做 可以指教一下么?
- 在资料里遇见13*42*23的时候,如何去掉*拆成13 42 23这样?
- 李维说话真哆嗦,从xzgyb (老达摩) 的帖子可以看得出来!
- 技术研讨最后期限,再次通告!
- 简单问题,散分...
- 如何截获OCX控件的EVENTS
- 如何将SQLSERVER数据库中存储的bolb型的jpg或bmp图片显示到image中去,高分请教
- XE5 如何开发 安卓
- 如何把文件藏到BMP中去?高手请进->>>
- 关于 delphi 7 以上版本的 IDE 和 编译后的 exe 问题。您一定也有这样的问题!!
- 编译算法问题,如何实现通过二元运算公式,计算出4则运算式的结果。急急急
- 請教lovelymelon
Tmp : TTreeNode;....
Tmp := TreeView.Items.AddChild(NIL,'A')
Tmp := TreeView.Items.AddChild(Tmp,'A-1')
Tmp := TreeView.Items.AddChild(Tmp,'A-2')
Tmp := TreeView.Items.AddChild(Nil,'B-1')end;
begin
DisConnectDb;
//清空树、ListViwe
if tvDemoTree.Items.Count <> 0 then
tvDemoTree.Items.Clear;
if lvDemoTree.Items.Count <> 0 then
lvDemoTree.Items.Clear;
end;procedure TfrmDemoTree.mmOperate_CnDBClick(Sender: TObject);
begin
ConnectDB;
end;procedure TfrmDemoTree.BuildTree(mP_TreeNode: TTreeNode; mPid: integer);
//用递归一次性生成所有树节点
var
idTemp:integer;
strSQL:string;
qryTemp:TQuery;
TrNodeTemp:TTreeNode;
begin
TrNodeTemp := mP_TreeNode;
qryTemp := TQuery.Create(self);
try
strSQL := ' select id,name '
+ ' from Tcity '
+ ' where Parentid='+inttostr(mpid);
ExecQry(strSQL,qryTemp,true);
while not qryTemp.Eof do
begin
idTemp := qryTemp.fieldbyname('id').AsInteger;
tvDemoTree.Selected := tvDemoTree.Items.AddChild(TrNodeTemp,qryTemp.fieldbyname('name').AsString);
BuildTree(tvDemoTree.Selected,idTemp);
qryTemp.Next;
end;
finally
qryTemp.Free; //释放资源
end;
end;procedure TfrmDemoTree.InitListView;
//初始化ListView
var
name,strSQL:string;
lvItem:TListItem;
Tempqry:TQuery;
begin
Tempqry := TQuery.Create(self);
try
lvDemoTree.Items.Clear; //清空
name := tvDemoTree.Selected.Text;
strSQL := ' select id '
+ ' from Tcity '
+ ' where name='''+name+'''';
ExecQry(strSQL,dmDemoTree.qryLV,true);
if not dmDemoTree.qryLV.Eof then
begin
strSQL := ' select * '
+ ' from Tcity where parentid='
+ inttostr(dmDemoTree.qryLV.fieldbyname('id').asinteger);
ExecQry(strSQL,dmDemoTree.qryLV,true);
while not dmDemoTree.qryLV.Eof do
begin
lvItem := lvDemoTree.Items.Add;
lvItem.Caption := inttostr(dmDemoTree.qryLV.fieldbyname('id').AsInteger);
lvItem.SubItems.Add(dmDemoTree.qryLV.fieldbyname('name').AsString);
strSQL := ' select name '
+ ' from Tcity '
+ ' where id='
+ inttostr(dmDemoTree.qryLV.fieldbyname('parentid').AsInteger);
ExecQry(strSQL,Tempqry,true);
lvItem.SubItems.Add(Tempqry.fieldbyname('name').AsString);
dmDemoTree.qryLV.Next;
end;
end;
finally
Tempqry.Free;
end;
end;procedure TfrmDemoTree.InitTree;
begin
tvDemoTree.Items.BeginUpdate;
tvDemoTree.Items.Clear;
BuildTree(nil,0);
tvDemoTree.Items.EndUpdate;
end;procedure TfrmDemoTree.mmFile_ExitClick(Sender: TObject);
begin
close;
end;procedure TfrmDemoTree.toolbtnExitClick(Sender: TObject);
begin
close;
end;procedure TfrmDemoTree.tvDemoTreeClick(Sender: TObject);
begin
if tvDemoTree.Items.Count <> 0 then //对数为空进行特殊处理
begin
lvDemoTree.Items.BeginUpdate;
InitListView;
lvDemoTree.Items.EndUpdate;
end;
end;procedure TfrmDemoTree.toolbtnBuildTreeClick(Sender: TObject);
begin
InitTree;
end;procedure TfrmDemoTree.mmOperate_BuildTreeClick(Sender: TObject);
begin
InitTree;
end;procedure TfrmDemoTree.tvDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' This is a TreeView!';
end;procedure TfrmDemoTree.lvDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' This is a ListView!';
end;procedure TfrmDemoTree.toolbtnExitMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 关闭按钮,退出请点击!';
end;procedure TfrmDemoTree.toolbtnCnDBMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 连接数据库按钮,需要连接数据库请点击!';
end;procedure TfrmDemoTree.toolbtnDiscnDBMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 断开数据连接按钮,需要断开数据库请点击!';
end;procedure TfrmDemoTree.toolbtnBuildTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 树生成按钮,需要生成树节点请点击!';
end;procedure TfrmDemoTree.toolbDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := '';
end;procedure TfrmDemoTree.sbDemoMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
sbDemo.SimpleText := '';
end;end.
其他的添加,查找你就自己
query1.close;
query1.sql.add(Select * from aa);
query1.first;
while not query1.eof do
begin
if qurey1.feildvalues['node_key']=0 then
TreeAddItem(TreeView1, GetFieldList, query1.getBook, false);
query1.next;
end; FieldList.clear;
TreeView1.Alphasort;
TreeView1.items.Endupdate;//make first record selected:
TreeView1.items[0].selected := true;送一个函数
function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
var
ThisNode, Node: TTreeNode;
I: Integer;
begin
Node := nil; //nil = level 0 has no parent node
//this is checked by TreeFindItem
for I := 0 to Itemlist.count - 1 do
begin
ThisNode := TreeFindItem(Sender, node, Itemlist[i]);
if ThisNode <> nil then Node := ThisNode else
begin
if I < Itemlist.count - 1 then
begin
if (I = 0)
then Node := Sender.items.Add(Node, Itemlist[i])
else if length(itemlist[i]) <> 0 then
Node := Sender.items.AddChild(Node, Itemlist[i]);
end else
begin
if (I = 0)
then Node := Sender.items.AddObject(Node, Itemlist[i], Book)
else if length(itemlist[i]) <> 0 then
Node := Sender.items.AddChildObject(Node, Itemlist[i], Book);
end;
Node.stateIndex := Node.level + 1;
if Resort and (Node.parent <> nil) then Node.parent.alphasort;
end;
end;
Result := Node;
end;