Asp.net中Treeview終極解決方案
2024-07-10 13:05:09
供稿:網友
 
最近在做權限模塊,挺頭痛的東西。不包括權限部分的業務,還包括權限部分的界面實現。由于采用了微軟的treeview控件來分配權限,所以碰到網上熱烈討論的有關treeview操作的刷新問題,在眾位先人和同事的幫助下,終于使treeview的問題得到了較好的解決。
1、前臺控制展開,收縮,check/uncheck,后臺控制selectedindexchanged。
解決方法:
將autopostback設置成false;  
在body里添加  <body  >  
然后在pageload里寫:  
string  strtreename  =  "treeview1";  
string  strref  =  page.getpostbackeventreference(treeview1);  
string  strscript  =  "<script  language=/"javascript/">  /n"  +  "<!--  /n"  +  "            function  inittree()  {  /n"  +"                        "  +  strtreename  +  ".onselectedindexchange  =  function()  {  /n"  +    "if  (event.oldtreenodeindex  !=    
event.newtreenodeindex)  /n"  +  "this.queueevent('onselectedindexchange',  event.oldtreenodeindex  +  ','  +  event.newtreenodeindex);  /n"  +    "window.settimeout('"  +  strref.replace("'","http://'")    +  "',  0,  'javascript');  /n"  +    "                        }  /n"  +      "            }  /n"  +    "http://  -->  /n"  +  "</script>";  
page.registerclientscriptblock("inittree",strscript  );  
2、在checkbox情況下。在前臺選擇checkbox后進行刷新,發現checkbox的狀態變得混亂,有些應該被選上的被弄丟了。這個問題是微軟treeview.htc中的一個bug,而且問題之前網上一直未發現有好的解決方法。昨天發現有位牛哥解決了這個問題,他完善了htc文件,并且在htc中增加了在checkbox情況下父子聯動的效果,對于需要實現這個功能而對js不太熟的人真是個福音啊,因為這意味著你不用寫任何代碼就可以實現這個功能了,真是非常感激啊。我把這位牛哥文章的http提供給大家:http://blog.csdn.net/cuike519/archive/2005/02/02/278271.aspx
3、對于selectedindexchanged,可以做到進一步的自定義。即如果樹有三層,可以使點擊第一層,第二層時不進行postback,只是在選擇第三層時才進行postback。
這個其實就是在第一點上進行修改,對于onselectedindexchange 處發的條件進行擴充。上面代碼中只是判斷了如果新節點與舊節點不是同一節點,就觸發selectedindexchange,執行_dopostback,你只要將條件改成你想要的限制條件就可以做到你想要的控制。不過要注意if后面的語句啊,if后面沒有跟{號,如果你要加附加條件的話,意味著應該有條件的執行后面兩句。
以上就是我兩天來的成果,呵呵。
國內最大的酷站演示中心!