请问如何在数据库里表示下列树性结构并在DXDBTREEVIEW里显示出来???

freekany2002 2002-01-17 10:01:09
rootnode1
node1
subnode1
subnode2
node2
subnode3
subnode4
roornode2
......
...全文
254 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
或者你能说说在TREEVIEW,TREELIST,DXDBTREEVIEW,DXDBTREELIST等表示树形结构的控件中,
keyfield,
displayfield,
listfield,
panrentfield,
datafield
等的含义吗?
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
qiubolecn(来自差生市),你好,不知道你用过DXDBTREEVIEW没有?我现在都变的迷惑了,假如表结构如以上你说的那样,那么在 DXDBTREEVIEW里如何设置呢?
qiubolecn 2002-01-17
  • 打赏
  • 举报
回复
增加一个字段parentid,表名为treetable

表结构变成 root subroot parentid

用sql 语句
update treetable set parentid=(select root from treetable t where t.subroot=treetable.root)
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
uppp
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
to : qiubolecn(来自差生市) 
如何转换?
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
象以下结构如何定义KEYFIELD,LISTFIELD,PARENTFIELD?

1 数据库
root SUBROOT
1 0
1 1
2 2
3 3
3 4


2 结构
ROOT1
SUBROOT1
SUBROOT2
ROOT2

qiubolecn 2002-01-17
  • 打赏
  • 举报
回复
转换一下数据结构吧

标准的

data parentid id
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
UPPPPPPPPPPPPP
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
你说的那样当然可以,但照这样一写,似乎很多代码就出来了,现在我希望用DEV EXPRESS的控件来实现,描述简单的结构几乎不用写代码,所以.....
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
这样的关系能不能在一个表里描述呢?

Left1 / RIGHT1 - SUBR1
\ - RIGHT2 - SUBR2
ROOT1 - RIGHT3 - SUBR3
/ - RIGHT4 - SUBR4
left2 \ RIGHT5 - SUBR5



left3 / RIGHT1 - SUBR6
\ - RIGHT3 - SUBR7
ROOT2 - RIGHT5 - SUBR8
left4 / \ RIGHT6 - SUBR9

注意: RIGHT列在不同的ROOT下可能相同如:RIGHT1同时在ROOT1,ROOT2
smallMM 2002-01-17
  • 打赏
  • 举报
回复
用循环添加,很简单,可以给你一个我以前编写的一个事例,其实可以有很多的办法实现
不过在我的实现过程中,要求的是,顺序一定的添加:

这是为已有节点动态添加子节点的例子:

classno=((MYNodeData)(trnode->Data))->ClassNo;
tmpqry->SQL->Add("select * from "+FLinkTable_Class->TableName+" where "+ classNo_fd+" like '"+classno+"%'");
tmpqry->Open();
if(tmpqry->RecordCount>=2)
{
tmpqry->First();
tmpqry->Next();
}
else
{
tmpqry->Close();
delete tmpqry;
return(true);
}
}
//******读取分类表数据,构建分类树***********
//******逐条读取分类表的数据,定位树节点,进行新节点的添加*******
while (!tmpqry->Eof)
{
StructData=new TMYNode;
StructData->ClassNo=tmpqry->FieldByName(classNo_fd)->AsString;
StructData->LibraryIndex=dbindex;
StructData->NameField=namefield;

AnsiString classno=tmpqry->FieldByName(classNo_fd)->AsString;
AnsiString classname=tmpqry->FieldByName(className_fd)->AsString;
if (classno.Length()>(((MYNodeData)(trnode->Data))->ClassNo).Length())
trnode=FtrView->Items->AddChildObject(trnode,classname,StructData);
else
{
while (classno.Length()<=(((MYNodeData)(trnode->Data))->ClassNo).Length())
trnode=trnode->Parent;
trnode=FtrView->Items->AddChildObject(trnode,classname,StructData);
}
trnode->ImageIndex=5;
trnode->SelectedIndex=6;
tmpqry->Next();
}

tmpqry->Close();
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
似乎要写很多代码啊
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
谢先!
smallMM 2002-01-17
  • 打赏
  • 举报
回复
建立编号 名称 两个字段
编号字段两位为一级
譬如 00 rootnode1
0000 node1
000000 subnode1
000001 subnode2
0001 node2
000100 subnode3
000101 subnode4
01 rootnode2

" select * from table where 编号 like '00'",这样的查询语句可以建立rootnode1级别下
所有的子节点
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
ooooo
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
急,大家快帮我想想嘛!
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
uppppppppppp
freekany2002 2002-01-17
  • 打赏
  • 举报
回复
uppppppppp

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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