• ASP.NET应用程序中TreeView 控件 即需填充 TreeNode 数据时,节点展开问题


    在使用TreeView服务端控件时,静态定义数据结构有时是不可行的,或者数据可能会依赖运行时收集的信息。为了动态显示数据,TreeView 控件支持动态节点填充。将 TreeView 控件配置为即需填充时,该控件将在用户展开节点时引发事件。事件处理程序检索相应数据,然后填充到用户单击的节点。若要以数据即需填充 TreeNode 对象,请将节点的 PopulateOnDemand 属性设置为 true,并创建 TreeNodePopulate 事件处理程序以向 TreeNode 对象中填充数据。(以上引自M$DN)

    示例:

    <asp:TreeView ID="trvTreeMenu" runat="server" AutoGenerateDataBindings="False" ExpandDepth="0" PopulateOnDemand="True" ShowExpandCollapse="true"
    Width="195px" OnTreeNodePopulate="Treeview1_TreeNodePopulate" ExpandImageUrl="img/selectChildNode.gif" Font-Names="宋体" Font-Size="10pt" Height="100%" ShowLines="True" ForeColor="Black">
    <Nodes>

    <asp:TreeNode Value="1" Text="根节点" PopulateOnDemand="true" NavigateUrl="#" > </asp:TreeNode>


    </Nodes>

    </asp:TreeView>

    在后端代码中可以实现Treeview1_TreeNodePopulate方法,动态填充TreeNode节点

    public void Treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
    {
    if (IsCallback)
    if (e.Node.ChildNodes.Count == 0)
    {
    LoadChildNode(e.Node);
    }
    }

    但是你会发现,因为节点是动态填充的,所以在页面刚打开时,整个TreeView总是处于收缩状态的.无论你是否设置了

    ShowExpandCollapse这个属性,你也会发现,只有用鼠标点击来展开树,Treeview1_TreeNodePopulate函数才会被触发。

    这样以来想让页面加载后树就处于部分展开状态,又想使用PopulateOnDemand的方式,只有手工加载需要展开的节点,其他的继续使用PopulateOnDemand="true"的方式

    原来的代码稍稍进行修改

    <asp:TreeView ID="trvTreeMenu" runat="server" AutoGenerateDataBindings="False" ExpandDepth="0" PopulateOnDemand="True" ShowExpandCollapse="true"
    Width="195px" OnTreeNodePopulate="Treeview1_TreeNodePopulate" ExpandImageUrl="img/selectChildNode.gif" Font-Names="宋体" Font-Size="10pt" Height="100%" ShowLines="True" ForeColor="Black">
    <Nodes>

    <asp:TreeNode Value="1" Text="根节点" PopulateOnDemand="false" NavigateUrl="#" > </asp:TreeNode>


    </Nodes>

    </asp:TreeView>

    在页面Page_Load函数里加上

    LoadChildNode(trvTreeMenu.Nodes[0]); 这样就仅仅展开了一级节点

    在LoadChildNode里增加节点时,以后的节点还是按需打开的:

    child.PopulateOnDemand = true;

    总结一下:

    在TreeView控件里,使用PopulateOnDemand按需加载时,其下不能有子节点,也就是无法手工进行初始化。如果需要手工初始化,PopulateOnDemand设置为false既可。

  • 相关阅读:
    获取ServletContext方法
    linux下echo命令详解
    非滤波单目视觉SLAM系统研究
    单目深度估计(Monocular Depth Estimation)之摄像机运动对深度估计的影响
    typedef函数指针用法
    REMODE+ORBSLAM运行配置(2) REMODE和编译后的ORB ros工程利用节点实现通讯
    跟我一起学习Makefile
    ubuntu下通过命令打开多个终端并在相应终端执指令
    REMODE+ORBSLAM运行配置(1) 把ORB编译成ROS工程
    ROS节点与运行
  • 原文地址:https://www.cnblogs.com/jans2002/p/844872.html
Copyright © 2020-2023  润新知