zoukankan      html  css  js  c++  java
  • 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既可。

  • 相关阅读:
    素数线性筛优化
    C++如何求程序运行时间
    02-线性结构4 Pop Sequence
    02-线性结构3 Reversing Linked List
    STL--priority_queue--自定义数据类型
    02-线性结构2 一元多项式的乘法与加法运算
    Linux——安装OpenSSH服务(CentOS系统默认安装了openssh)
    Linux——Vim快速查找功能
    Xmanager——连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次
    解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
  • 原文地址:https://www.cnblogs.com/jans2002/p/844872.html
Copyright © 2011-2022 走看看