Web控件TreeView展开无闪烁的一个解决方法

已经无数次见到有人提出这个问题了。。。。。  
   
  用.net控件TreeView而展开时不刷新的变通方法主要有以下步骤:  
   
  1。在Page_Load中为你的TreeView添加以下属性,这句话为TreeView添加Click时的回发事件。  
   
  TreeView1.Attributes["OnClick"]   =   @"javascript:   window.setTimeout('__doPostBack(/'TreeView1/',/'/')',   0,  

'JavaScript')";  
   
  2。在.aspx页面文件中添加一个隐藏的Button用来产生TreeView的回发事件:  
   
  <INPUT   id="Button1"   style="DISPLAY:none;"   type="button"   value="Button"   name="Button1"   runat="server"> 

 
   
  这个Button必须为Html控件,并将其转为在服务器端运行。  
  style="DISPLAY:none;"该句用来在页面隐藏Button。  
  在Visual.net的设计界面双击该Button产生以下事件:  
  private   void   Button1_ServerClick(object   sender,System.EventArgs   e)  
  {  
   
  }  
  这里不用添加任何代码,目的是当服务器处理该页面并发送给客户端时产生下面客户端脚本:  
  <script   language="javascript">  
  <!--  
  function   __doPostBack(eventTarget,   eventArgument)   {  
  var   theform   =   document.Form1;  
  theform.__EVENTTARGET.value   =   eventTarget;  
  theform.__EVENTARGUMENT.value   =   eventArgument;  
  theform.submit();  
  }  
  //   -->  
  </script>  
  这段代码用于回应TreeView的Click事件。。。。。。。。。。。。。。。。。。。此代码不用手工添加。。。。。  
   
  3。好。。。大功告成。。。为你的TreeView添加TreeView1_SelectedIndexChange事件:  
  在设计界面,TreeView上右键属性。。。事件。。找到SelectedIndexChange。。。双击。。在cs文件中产生。。  
  private   void   TreeView1_SelectedIndexChange(object   sender,  

Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs   e)  
  {  
   
  }  
  在里面添加测试代码。。。  
   
  Microsoft.Web.UI.WebControls.TreeNode   NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);  
  Response.Write(NewNode.GetNodeIndex());  
   
  。。。。。。。。OK。。。。。。。。。。。。。。。。  
   
   
  测试地址。。。。http://eu.webmatrixhosting.net/ganggang/tree.aspx。。。有点慢大家谅解。。。  
   
  有什么问题请提出。。。。。。呵呵。。。。。  

------------------------------------------------------------------------------------------------------------

关于类似的TreeView展开不提交,点击才提交,我也有一个方法  
  http://eu.webmatrixhosting.net/hgknight/tree.aspx  
   
  方法如下  
   
  可以将autopostback设置成false;  
  在body里添加   <body   οnlοad="initTree()">  
  然后在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("'","//'")     +   "',   0,   'JavaScript');   /n"   +    
                        " }   /n"   +                  
                        " }   /n"   +      
                        "//   -->   /n"   +  
                        "</script>";  
   
                Page.RegisterClientScriptBlock("InitTree",strScript   );  
  这样就只有你点击的节点更改的时候才提交!  
   
  to   monkey_zeng(未来报告)  
  顺便说一下,慢是由于服务器的问题,你可以在本机测试一下这个方法:)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值