to hgknight(江雨.net)
我用的就是csdn上的第二种方法,屏幕不会闪烁,但onSelectedIndexChange事件也无效,从js的内容看,应该是替换了onSelectedIndexChange事件,是不是onSelectedIndexChange应该全部在js脚本中写呢?但我需要的是在服务器端的事件,怎么办?

解决方案 »

  1.   

    第2种方法在哪里?我也遇到了一样的问题我是把treeview在帮定时全不展开来减少用户的
    点击次数的,实在是不能忍  那为大哥解决了 给点提示啊!
      

  2.   

    试试下面两种方法-----------转载-----
    已经无数次见到有人提出这个问题了。。  
     
    第一种。。  
     
    用.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());  
     
     
    测试地址。  
    http://eu.webmatrixhosting.net/ganggang/tree.aspx  
    有点慢大家谅解  
     
     
    第二种。。  
     
    关于类似的TreeView展开不提交,点击才提交,我也有一个方法此乃hgknight方法也。  
     
    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  );  
     
    这样就只有你点击的节点更改的时候才提交!  
     
     
    个人认为。hgknight(江雨.net)的方法要更好一点  
     
    虽然原理相似但我的用的是Click事件。。这导致点击同一节点时也会回发页面。虽然这时不会触发。SelectedIndexChange事件这一点需要改进。。
      

  3.   

    to hgknight(江雨.net)我已经新建了页面测试,还是不行,你把treeview的autopostback属性设为false,treeview就无法响应服务器端的onSelectedIndexChange事件,你写的js代码inittree是否实现激活onSelectedIndexChange事件的功能,我看好象不是,但如果不是的话,就是我目前的现象:屏幕不会闪烁,但onSelectedIndexChange事件也无效.
    如果方便能否给我一段源代码学习,不胜感激!我的E_mail:[email protected]
      

  4.   

    江雨的代码我原来也试过几次~都不行~都还是有闪烁~CSDN.net论坛中的treeview就没闪烁~不知道怎么搞的!!真想知道啊~~