• 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既可。

  • 相关阅读:
    iOS下JS与OC互相调用(一)--UIWebView 拦截URL
    【转】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚
    Spring MVC的一些学习笔记-入门配置和HttpMessageConverter
    xrdp 安装后 WINDOWS远程登录出错
    树莓派(raspberry pi)更改键盘布局
    说说qwerty、dvorak、colemak三种键盘布局
    手机就能申请摇号 杭州市小客车摇号功能全新上线
    几种你不知道的获取浙A牌照的方法
    【转】则表达式匹配居民身份证
    机房收费系统之—如何查询两个日期之间的数据
  • 原文地址:https://www.cnblogs.com/jans2002/p/844872.html
Copyright © 2020-2023  润新知