版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明
作者:xixi
出处:http://blog.csdn.net/slowgrace/archive/2008/12/06/3456997.aspx
1. 只保存在一个地方:细节表里
既然多挂节点在多个树表和自己的细节表里都有对应的记录,那么节点名称strNodeName应该存在哪个表里呢?还是3个表中都存呢?
我的决定:strNodeName揍存在细节表里,strNodeName到这个表里找;如果添加节点指定其为基础节点的话,就把该节点的strNodeName设为"",然后在节点细节表里设置它真正的名字。实际上,我决定所有指定细节的节点的名字,不管它是否是多挂的,都唯一地存在detailtable里。生成树的时候,如果节点名是“”,就自动到detailtable去找name。
这样的好处,至少对多挂节点而言,万一我改了节点名,不用累得贼死跑N个地儿去通知了。
2.为了排序的话......
不过,树表里的strNodeName字段除了可用来存不带细节的树节点的名字外,还有个用处,就是用来在生成树的时候做临时存储真正strNodeName的地方。因为生成树的时候希望能对节点按名字排序,这就需要在取记录的时候就按名字排序,然后添节点的时候就按这个序去一个个add上。懒得自己编排序的代码,所以想在数据库里生成一个临时表,把strNodeName、lngNodeId等搁里边,然后用数据库的order功能。后来想想干嘛还生成临时表呀,我直接就搁树表的strNodeName字段不得了,反正那个字段闲着也是闲着。
不过,这样的话,表面上看起来树表的strNodeName字段里也存着完全正确的strNodeName,但其实它不是实时更新的。每次树上刚添加去新节点的时候,它是对的;之后改名字的时候,我并不到树表里更新strNodeName.
咳,我费这个劲干嘛呀。要不,还是每次改名字的时候顺趟把树表里的也改了算了。反正,要么是生成树节点的时候慢,要么是改名字的时候慢。改名字只涉及一个节点,生成树节点的时候可就不好说了。所以,还是改名字的时候麻烦点算了。所以,最后的结论是:strNodeName在树表和细节表都存,都随时保持最新。
3.又改回去鸟
得,俺又改回去了。因为我发现treeview可以自动对某节点的子节点排序(按text)。所以我又改成只有细节表一个地方存节点名。
不过,有个问题,就是添新节点的时候还没指定细节,这时候节点名往哪儿存呢?我决定设计一个缺省细节表NANODE,所有没指定细节的节点的类型都是NANODE,这样新节点名就存在这个NAnode表的字段里就行了。
更多树类文章