倾家当产找答案--[有谁会做Mybase类似的树](50分)

  • 主题发起人 主题发起人 xiayang1230
  • 开始时间 开始时间
X

xiayang1230

Unregistered / Unconfirmed
GUEST, unregistred user!
有谁会做Mybase这个软件类似的树型目录,先放50分,调试通过,或有原代码再给
436分
 
不知道你到底要做什么,只是做一个树吗??还是要实现Mybase中的所有功能--比如拖放

请说得详细点
 
根据数据库生成树,并能添加删除节点
 
这个不难哦。。。看看以前的讨论就有了。。。。

看看学学就可以的了。。。不然,拿了源代码还是不明白。。。
 
有人会吗?这么看的人多,回答的人没有啊
 
dxtreelist可以吧.
 
这个问题我正在做,若是你从一个表中取数据,可以用递归,若是从不同的表取数据
那就一层一层的取吧!
从一个表中取数据:
表的结构是:TdgTest1(SQL Server2000)
idNo 4 char
prevIdNo 4 char
idName 10 char
创建树:
procedure TForm1.CreateTree(var ANode: TTreeNode; var pid: string);
var
sName : string;
currName : string;
id : string;
currid : string;
begin
ADODataSet2.Active := false;
ADODataSet2.CommandText := '';
ADODataSet2.CommandText := 'select idNo, prevIdNo, idName from TdgTest1 where prevIdNo='''+pid+'''';
ADODataSet2.Active := true;

while not ADODataSet2.Eof do
begin
//ToDo:
sName := ADODataSet2.FieldByName('idName').AsString;
currName := trim(sname);
ANode := TreeView1.Items.AddChild(ANode, currname);
id := ADODataSet2.FieldByName('idNo').AsString;
currid := id;
CreateTree(Anode, id);
ANode := ANode.parent;
ADODataSet2.Active := false;
ADODataSet2.CommandText := '';
ADODataSet2.CommandText := 'select idNo, prevIdNo, idName from TdgTest1 where prevIdNo='''+pid+'''';
ADODataSet2.Active := true;
ADODataSet2.Locate('idNo', currid, [loCaseInsensitive]);
ADODataSet2.Next;
end;
end;
调用的时候是:
procedure TForm1.Button5Click(Sender: TObject);
var
t : TTreeNode;
id : String;
begin
t := nil;
id := '0000';
TreeView1.Items.Clear;
CreateTree(t, id);
TreeView1.SetFocus;
end;
希望对你有帮助
现在较忙,以后详细给你说!
 
我不久前做过的一个可以支持无穷级树,
但在支持数据库修改方面做得不是很好。如果你要的话。可以同我联系。
 
virtualmfc能给我发一个吗
 
好大一棵树!大家都在谈树吗?就是没有人种树哦。[:)]
我做了一个通用的代码维护控件,可以从数据库中生成任意层次的代码树,并能
进行代码维护工作(增、删、改、查等)。只是还没过保密期,现在还不能给你原
程序,如果感兴趣,可以在此讨论做法。

 
to blueboy:请看http://www.delphibbs.com/delphibbs/dispq.asp?lid=956669
麻烦你帮我解决一下!
多谢!!
 
其实大家不用将这个问题看得那么神秘,因为本质上要模拟现实中的层次树状关系,
用数据结构理论中的树最好处理了!!!只是一般人会觉得奇怪,那就是平面二维的数据库
表记录如何与之转换。在这里我提示大家一下,做树有两个要注意的问题:
一是是否要一下子全部取出所有数据,表面上看起来好象很占内存,但其实一般情况下
层次树的表都是记录不多的,大家想一想就明白了,不是吗?如果全部读入内存那么处理
起来的速度就非常快了。
二是在进行代码维护工作时,如何在数据库表中正确地反映出树状的关系。
这一点大家都有自己的见解。我自认为以前解决的不是很好,后来见到DELPHI深度历险
网站上有一个DBTree控件,有源代码。我还没有去分析,有兴趣的可以去那看一下。

Blueboy的经验如何,能讲出来大家讨论一下吗?
 
同意virtualmfc 的说法。至于代码表是不是一次取完,取决于表中记录
的多少,大多数情况下代码表都很小,数百个不算多,但如果是数千上万,
那就很可观了。但问题的焦点不在这儿。

如果只是想把数据库中的结构代码表,以树的形式显示,这个问题其实
也很简单的:定好代码规则,查询时以代码排序,然后在一个大循环内用一
定的算法把代码名称安放到TreeView上,OK。
若要做一个通用的代码维护控件,要考虑的就远不只这些了。为了在开
发团队中让程序员很容易地处理代码问题,代码维护控件需要考虑各种复杂
的性形。在我们的代码维护控件中,已实现的有如下功能:
1 、代码为等长代码(当然如果需要也可以设计不等长的代码,只是在
我们所做的项目中,我们发现等长代码已满足需要并且更规范),代码的长
度和层次结构不受限制,代码的层次结构用字符串表示为 n1n2n3...... 如
2431,只要把这一串传给控件,控件就能处理树形结构的显示等工作。
2 、代码表不一定只有代码和名称两个字段,还可有其他需要的字段,
所以控件应该能够根据代码表的结构自动生成单条记录的维护界面。我们的
做法是该界面放在一个panel上,与TreeView 左右并排在同一个From上,这
样比较直观。
3、控件还应该能够处理代码级连的情形。如工程代码表中有一个字段
“资金来源”,“资金来源”要从另一个代码表中选取,控件要能处理这种
级连关系。
4、控件除了要有增、删、改、查、打印、导出等功能之外,还应该具有
某些数据库事务处理的能力。如当某个代码被修改后,已经引用这个代码的
数据表中的代码要跟着变更,要不然就不能保持数据的一致性,删除也一样。
当然这些功能也可以放在触发器中处理。问题是有些数据库如DBF就没有触发
器,就算有,不同的数据库系统写法也不一样,移植会有很大问题。再一个
当代码表很多时,写那么多个触发器对程序员来说也是一种负担,如果控件
能解决,程序员会轻松很多。
还有其他一些细节.......
通过这样的设计后控件就是一个独立的功能比较完整的程序了,可以作
为开发团队的可复用资源被程序员充分利用。事实上,因为有了这样的控件,
我们所做的所有项目中程序员基本上就不用再编写代码维护程序了。

===================================================================
顺便说一个题外话,我觉得在DFW中讨论问题,最好还是多说说一些做法
少问一些别人要源代码,特别是一些想征求别人做法或方案的帖子。因为对
老手来说,只要了解别人的设计思想,再看一看程序中的关键代码段,则心
中已有成数,分析原程序是一种沉重的负担;而对新手而言,在不知别人的
设计思路的情况下贸然去解读别人的程序,你不头大我也会头大哦。

 
用dxDBTreeList1只要在数据库里设置好inum ,iparent就可以实现,而且支持托拽
 
后退
顶部