Technorati 標籤: 多樹聯動,動態生樹,treeview,添加新節點
著作權聲明:可以任意轉載,轉載時請務必以超連結形式標明如下文章原始出處和作者資訊及本聲明
作者:xixi
出處:http://blog.csdn.net/slowgrace/archive/2008/12/09/3485067.aspx
這個標題有點拗口,給兩個連結先。這裡解釋了多樹聯動的概念,這篇文章講了動態生樹的問題。本來嘛,給樹加個新節點是簡單的,但是因為有多掛節點的存在、再加上標誌位的設定,情況就有點複雜了。
我們知道,在動態生樹的過程中,如果節點的見游標志位是N,在點擊它的父親節點的時候,就會產生它的兒子節點。那麼,問題來了,如果我們給某個節點J2添了新節點J3,那麼如果J2的見游標志位是N,如果使用者之後點擊了J2的父親J1之後,系統就會試圖產生J2的孩子,這就會導致J3的重複添加,就會出現執行階段錯誤。
那麼J2的見游標志位會是N嗎?答案是不會。因為既然能給它添新節點,它一定是見光的,否則沒法點著它然後在它上面加新節點呀?
原樹上的J2是肯定見光了的,那麼同名非原樹(簡稱同名樹吧,也就是基於同一樹表的另一個treeview控制項)上的J2也一定見過光嗎?答案是不一定。同樹上的J2甚至可能壓根沒產生過,或者產生了但使用者還沒點過它的父親,那它就沒機會見光。如果沒見過,就像我們上上一段分析的,如果把J3加上,就會導致執行階段錯誤。
所以,對於同樹節點,如果它的父親節點沒見過光,我們就不可以給它加新節點。
再一個問題,新添加節點J3的見游標志位應該是N還是Y?
其實J3自己是Y還是N其實無所謂,因為之所以設定這個標誌位是為了防止重複產生孩子節點,而J3沒有孩子(它是新節點當然沒孩子了),即使重複產生一遍也不會導致重複的孩子節點。不過J3的兄弟們是有所謂的:如果J3的兄弟們沒見過光,而J3把自己設定為Y,那下次使用者點擊J2的時候,J3的兄弟們就都失去了生育的機會;如果J3的兄弟們生過了,而J3把自己設定為N,那下次使用者點擊J2的時候,J3的兄弟們就都得超生。所以,雖然J3自己設啥標誌位沒關係,但是不能不和它的兄弟節點設為一致。
如果沒有兄弟節點的話,J3的見游標志位怎麼設定呢?我看在原樹上就設為Y,省得日後還得重複訪問資料庫去看它有沒孩子;而在同名樹上還是設為N吧,省得日後不斷添加沒見過光的子孫節點(剛才討論過的哈,如果同名樹上父親節點沒見過光,就不給它添新節點)。