如何将现有数据变成树treeview...200分相送..请进...(205分)

  • 主题发起人 主题发起人 LZ2000
  • 开始时间 开始时间
L

LZ2000

Unregistered / Unconfirmed
GUEST, unregistred user!
access 表 现在正在使用,无法改变结构了,请问以下的数据可以实现 tree树吗?

给出能解决的代码 或 关键提示 或 能解决的方法.或那个三方控件实现....200分相送..:)..

即 进行 显示 树,及增加,删除,修改等操作...(能对数据库操作)

字段名:/及 表数据
国家 | 省份 | 城市 | 区 | 邮政编码 | id (自动编号,主键)
中国 广东 广州 白云 510000 1
中国 广东 深圳 福田 550000 2
中国 广东 广州 黄浦 510001 3
中国 湖南 常德 常德 210000 4
中国 台湾 台中 市区 300000 5
英国 伦敦 市区 市区 110000 6
美国 纽约 曼哈顿 市区 100000 7
 
可以的,把数据表排序后可以生成树,
 
再加一个父节点字段最好,不用加也可以
 
不用加。
 
生成原理:
把表排序
select * from table order by 国家,省份,城市,区,邮政编码
例如做四层的树就是国家-省-市-区
则是四层循环就行了.
根结点是国家字段.
首先第一条记录的国家字段的数据来建第一个根结点,然后省是二级结点,市是三级结点,区是四级结点
然后根据前一条记录和当前数据是否变化了来确定是不是要新增结点了.
 
可以参考下我做得dbtree,www.ysza.com
,免费资源,源码,qq:171833017
 
到我的BLOG上看看,对TreeView的扩展,可以很容易实现数据到树的转换
http://snowmansoft.139.com/article/801492.html
 
TO: 李翔鹏/文生 可以详细点吗? 因为我一直都在作数据库软件..没有作过 treeview

TO:一生中最爱,安装 后找不到 控件图标...我是D7

TO:shunzi1220,不能下......

:)
 
这样的情况一般可以加一个父节点,然后递归就好了。在节点里储存ID,Name等信息。。。
 
看代码,晕
RegisterComponents('samples', [TNewDBTv]);
 
更新了链接
http://snowmansoft.139.com/article/801492.html
 
来自:李翔鹏, 时间:2006-11-3 16:21:07, ID:3614232
可以的,把数据表排序后可以生成树,
你怎么排序阿
每一个字段的相同的内容都有可能会去掉

为什么一定要treeview??
grid list不都不错??
 
只能先select distinct 国家 from table 建立第一层节点
然后根据treeview的鼠标事件建立第二层节点
select distinct 省份 from tabel where 国家 = treeview1.select.text
 
看我的这两个过程
procedure TDM1.FillTreeView(Tree: TObject;tExpLevel:integer;FillChild:boolean;IDItem:TStrings;tExpand:integer);
var
tDT:tADOQuery;
MKLst:tStrings;
MtypeId:string;
procedure CreateSubTree(pMKLst:Tstrings;NodeId: string; Node: TTreeNode = nil;ExpLevel:integer=0;tFC:boolean=true;tIDItem:Tstrings=nil;tEpd:integer=1);
var
iCount:integer;
TreeNode: TTreeNode;
function pGetMKID(Str:string):string;
begin
Result:='';
Result:=Copy(Str,1,Pos('=',Str)-1);
end;
function pGetMPKId(Str:string):string;
var
tStr:String;
begin
Result:='';
tStr:=Copy(Str,Pos('=',Str)+1,Length(Str));
Result:=Copy(tStr,1,Pos('=',tStr)-1);
end;
function pGetMKind(Str:string):string;
var
tStr:String;
begin
Result:='';
tStr:=Copy(Str,Pos('=',Str)+1,Length(Str));
Result:=Copy(tStr,Pos('=',tStr)+1,Length(tStr));
end;
begin
for iCount:=0 to pMKlst.Count-1 do
if NodeId=pGetMPKID(pMKLst[iCount]) then
begin
MTypeId :=pGetMKID(pMKLst[iCount]);
if (Tree is TTreeView) then
TreeNode:= TTreeView(Tree).Items.AddChild(Node, pGetMKInd(pMKLst[iCount]))
else if (Tree is TtcTreeCombobox) then
TreeNode:= TtcTreeCombobox(Tree).Items.AddChild(Node, pGetMKInd(pMKLst[iCount]));

if tIDItem<>nil then
tIDItem.Add(MTypeId);
if (tEpd=0) or (TreeNode.Level<=tEpd) then
TreeNode.Expanded:=true
else
TreeNode.Expanded:=false;
TreeNode.ImageIndex:=1;
TreeNode.SelectedIndex:=0;
if tFC then
CreateSubTree(pMKLst,mTypeId, TreeNode,tExplevel,tFC,tIDItem,tEpd)
else
if (TreeNode.Level<=ExpLevel) then
CreateSubTree(pMklst,mTypeId, TreeNode,tExplevel,tFC,tIDItem,tEpd); // 此处循环递归

if (tEpd=0) or (TreeNode.Level<=tEpd) then
TreeNode.Expanded:=true
else
TreeNode.Expanded:=false;
end;
end;
begin
MKLst:=tStringList.Create;
tDT:=tADOQuery.Create(nil);
tDT.Connection:=adoQytmp.Connection;
with tDT do
try
close;
sql.Text:='select M_K_Id,M_Kind,M_P_K_Id from tblMaterial_Kinds order by M_K_Id';
open;
first;
while not eof do
begin
MKLst.Add(trim(FieldByName('M_K_Id').AsString)+'='+
trim(FieldByName('M_P_K_Id').AsString)+'='+
trim(FieldByName('M_Kind').AsString));
Next;
end;
close;
finally
free;
end;
if IDItem<>nil then
IdItem.Clear;
if Tree is Ttreeview then
begin
TTreeView(Tree).Items.BeginUpdate;
TTreeView(Tree).Items.Clear;
with TTreeView(Tree).Items.Add(nil, '物料类别') do
begin
ImageIndex := 1;
SelectedIndex := 0;
if IDItem<>nil then
IdItem.Add('0');
end;
CreateSubTree(MKLst,'0', TTreeView(Tree).Items[0],tExpLevel,FillChild,IdItem,tExpand);
TTreeView(Tree).Items.EndUpdate;
TTreeView(Tree).Items[0].Selected := True;
TTreeView(Tree).Items[0].Expanded:=true;
end
else if (Tree is TtcTreeCombobox) then
begin
TtcTreeCombobox(Tree).Items.BeginUpdate;
TtcTreeCombobox(Tree).Items.Clear;
with TtcTreeCombobox(Tree).Items.Add(nil, '物料类别') do
begin
ImageIndex := 1;
SelectedIndex := 0;
if IDItem<>nil then
IdItem.Add('0');
end;
CreateSubTree(MKLst,'0', TtcTreeCombobox(Tree).Items[0],tExpLevel,FillChild,IdItem,tExpand);
TtcTreeCombobox(Tree).Items.EndUpdate;
TtcTreeCombobox(Tree).Items[0].Selected := True;
TtcTreeCombobox(Tree).Items[0].Expanded:=true;
end;
MKLst.Free;
end;

//返回选定物料类别的类别代码
function TDM1.Return_M_Kind_ID(Node: TTreeNode): string;
var
Ado_tmp:TADODataset;
sNode:TTreeNode;
begin
sNode:=Node;
if sNode.Parent=nil then
begin
Result:='0';
exit;
end;
try
ADO_tmp:=TADODataset.Create(self);
ADO_tmp.Connection:=adoQyMtype.Connection;
with ADO_tmp do
begin
close;
commandtext:='select * from tblMaterial_Kinds where M_Kind=:QName and M_P_K_ID=:QPid';
parameters.ParamByName('QName').Value:=sNode.Text;
if sNode.Parent=nil then
Parameters.ParamByName('QPid').Value:='0'
else
Parameters.ParamByName('QPid').Value:=Return_M_Kind_ID(sNode.Parent);
open;
Result:=trim(FieldByName('M_K_ID').AsString);
end;
finally
ADO_tmp.Free;
end;
end;
 
后退
顶部