asp.net treeview通过避免崩溃和expandall

时间:2010-02-16 07:26:18

标签: asp.net

我在ASP.NET中使用C#2.0和Visual Studio 2005.我正在使用母版页和内容页。我在母版页中有一个树视图菜单,当用户选择任何菜单项时,我会重定向到该内容页面。

我的问题是,在用户导航到内容页面后,所有treenodes刷新并且结构已折叠。我希望所选的treenode保持扩展。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您是否在任何UpdatePanel内使用树视图?实际上UpdatePanel不支持TreeView。然而,我使用了许多其他代码来管理相同的操作。您可以在http://www.geekays.net/post/Using-TreeView-inside-AJAX-UpdatePanel.aspx和同一网站上的其他帖子中看到大部分内容:http://www.geekays.net/post/TreeView-control-postbacks-on-check-and-uncheck-of-the-nodes-Checkbox.aspx

我还添加了如下所示的javascripts,以滚动到所选的树节点,但成功效果不佳:

function scrollSelectedTviewNodeToDisplay(){
    try{    
        var inpSelectedNode = document.getElementById("ctl00_contRMSMaster_TViewDeviceHeirarchy_SelectedNode");
        var divTree = document.getElementById("ctl00_contRMSMaster_TViewDeviceHeirarchy");
        if (inpSelectedNode.value != "")
        {
            var objScroll = document.getElementById(inpSelectedNode.value);
            //my treeview is contained in a scrollable div element
            var posY =findPosY(objScroll);
            //alert(posY);
            if (divTree){
                divTree.scrollTop = posY;
                //alert(divTree.nodeType);
            }
            //this works as well bu, but there is not as much control over the y position
            //document.all(inpSelectedNode.value).scrollIntoView(true);
        }
    }
    catch(oException) 
        {
            //alert(document.getElementById("ctl00_contRMSMaster_divTree"));
        }
}

function findPosX(obj){
    var curleft = 0;
    if (obj.offsetParent)
    {
        while (obj.offsetParent)
        {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj){
    var curtop = 0;
    if (obj.offsetParent)
    {
        while (obj.offsetParent)
        {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}