关闭

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

4046人阅读 评论(1) 收藏 举报

已经无数次见到有人提出这个问题了。。。。。  
   
  用.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   onload="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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35356次
    • 积分:442
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:31篇
    • 译文:0篇
    • 评论:1条