出100分TreeView讨论,进来看看吧.

santafeng 2003-08-19 03:47:20
数据库表
地区城市ID AreaID int TRUE FALSE TRUE
区域ID ZoneID int FALSE TRUE FALSE
地区城市名称 AreaName varchar(50) FALSE FALSE FALSE
父地区城市ID AreaFather int FALSE FALSE FALSE
主地区城市ID AreaHost int FALSE FALSE FALSE

程序
procedure TForm1.FormShow(Sender: TObject);
begin
while not Self.SimpleDataSet1.Eof do
begin
if Self.SimpleDataSet1.FieldByName('AreaFather').Value ='0' then
begin
Self.TreeView1.Items.Add(nil,Self.SimpleDataSet1.FieldByName('AreaName').Value);
end;
Self.SimpleDataSet1.Next;
end;
end;

但我想有子节点,现在只显示两个父节点,有什么最快最简单的方法把子节点都显示出来.
...全文
32 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vchoushen6 2003-08-20
  • 打赏
  • 举报
回复
要想快,就先取父节点显示,点击某节点后,再取其子节点来显示。当然,这是在数据量较大的情况下,若是数据量不大的时候,可以先将数据集按节点,子节点排序,然后做个类似二叉树的遍历就行了,这是每本数据结构的必有内容。
vchoushen6 2003-08-20
  • 打赏
  • 举报
回复
要想快,就先取父节点显示,点击某节点后,再取其子节点来显示。当然,这是在数据量较大的情况下,若是数据量不大的时候,可以先将数据集按节点,子节点排序,然后做个类似二叉树的遍历就行了,这是每本数据结构的必有内容。
vchoushen6 2003-08-20
  • 打赏
  • 举报
回复
要想快,就先取父节点显示,点击某节点后,再取其子节点来显示。当然,这是在数据量较大的情况下,若是数据量不大的时候,可以先将数据集按节点,子节点排序,然后做个类似二叉树的遍历就行了,这是每本数据结构的必有内容。
Little2000 2003-08-20
  • 打赏
  • 举报
回复
//看看下面的例子对你有没有帮助
procedure TFrmDoor.FormCreate(Sender: TObject);
var
FirstNode: TTreeNode;
I: Integer;
begin
FirstNode := TreeView1.Items.Add(TreeView1.Items.GetFirstNode,'全部');
AdoQuery1.Close;
AdoQuery1.SQL.Text := 'select * from TableName';
AdoQuery1.Open;
AdoQuery1.First;
while not AdoQuery1.Eof do
begin
TreeView1.Items.AddChild(FirstNode,Trim(AdoQuery1.FieldByName('字段名').AsString));
AdoQuery1.Next;
end;
end;
tiexinliu 2003-08-20
  • 打赏
  • 举报
回复
我的存储过程你可以写成sql语句呀,只要找出父亲节点为当前节点的所有区域就ok了
Spqk005 2003-08-19
  • 打赏
  • 举报
回复
打开表单时请建立相关树
bluemeteor 2003-08-19
  • 打赏
  • 举报
回复
mysql目前不支持存储过程...

不太了解楼主想干吗
santafeng 2003-08-19
  • 打赏
  • 举报
回复
MySQL能写存储过程吗?那你那存储过程没有代码?
tiexinliu 2003-08-19
  • 打赏
  • 举报
回复
使用递归吧:自己程序的一个过程,参考一下,存储过程查找所有父亲编号等于该节点编号的所有客户,pstr为一个指向字符串的指针。可以把TclientDatset换成任意的数据集
procedure TCustomerRelationFrm.CreateSubTree_all(FNodeName: string; Node: TreeNode = nil);
var
mLocalName: string;
TreeNode: TTreeNode;
Ads_Tmp: TClientDataset;
p:pstr;
begin
ADS_Tmp := Tclientdataset.Create(Self);
ADS_Tmp.RemoteServer:=mainfrm.SocketConnection1;
ADS_Tmp.ProviderName:='datasetprovider3';
with ADS_Tmp do
begin
Close;
CommandText :='QUERY_customer_By_Parent_No_sec '+''''+FNodeName+''''+','+''''+userid+'''';;
//SELF.Memo1.Lines.Add(commandtext);
Open;
First;
while not Eof do
begin
mLocalName := FieldbyName('ID').Asstring;
new(p);
p^:=mlocalName;
TreeNode :=self.tv_zb.Items.AddChildObject(Node, FieldByName('Name').AsString,p);
CreateSubTree(mLocalName, TreeNode);
Next;
end;
end;
ADS_Tmp.Free;
end;

江山易改 2003-08-19
  • 打赏
  • 举报
回复
使用递归

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧