zoukankan      html  css  js  c++  java
  • 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());


    测试地址。。。。
    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事件。。。这一点需要改进。。。。。
  • 相关阅读:
    [BZOJ 4001] [TJOI 2015] 概率论
    【计算几何】推导坐标的旋转公式
    【动态规划学习】01背包
    (坑)网络流24题
    bzoj2442(单调队列优化)
    [lydsy2005]能量采集
    主席树
    [noi2005][treap]序列维护
    [Apio2012][Treap]派遣
    [CodeVs][1514][Treap][书架]
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/127575.html
Copyright © 2011-2022 走看看