【问题标题】:Load a TreeView from a DropDownList value C# ASP.NET从 DropDownList 值加载 TreeView C# ASP.NET
【发布时间】:2020-05-12 13:11:15
【问题描述】:

我有一个带有 TreeView 和 DropDownList 的 asp.net 页面。 TreeView 在代码隐藏中定义:

            <asp:TreeView ID="TreeViewResume" runat="server" ImageSet="Simple" NodeIndent="15" OnSelectedNodeChanged="ClickTreeViewResume">
            <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
            <NodeStyle Font-Names="Tahoma" Font-Size="12pt" ForeColor="#203239" HorizontalPadding="0px"
                NodeSpacing="0px" VerticalPadding="4px"></NodeStyle>
            <ParentNodeStyle Font-Bold="False" />
            <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="2px"
                VerticalPadding="0px" />
        </asp:TreeView>

还有 DropDownList :

<asp:Panel ID="PanelDdl" runat="server">Sélection de la période : <asp:DropDownList ID="Ddl" runat="server" OnSelectedIndexChanged="Ddl_SelectedIndexChanged" AutoPostBack="true">

我通过 Page_Load() 中的代码加载 TreeView:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        RemplirTableau();
    }
}

我希望在 DropDownList 的 SelectedIndexChange() 上更改 TreeView 的 SQL 源并重新绘制 Treeview。

protected void Ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    TreeViewResume.Nodes.Clear();
    RemplirTableau();        
}

与此不同,只打印 TreeView 的第一级节点(父节点)。

有什么帮助吗?

【问题讨论】:

    标签: c# asp.net drop-down-menu treeview


    【解决方案1】:

    调用 TreeView.Nodes 只会访问 TreeView 的直接子节点。为了访问较低的孩子,您可以使用某种类型的递归。

    类似:

    void ClearTreeView(TreeNode parentNode){
      foreach(TreeNode childNode in parentNode.Nodes){
        if(childNode.Nodes.Count > 0){
          ClearTreeView(childNode);
        }
        else{
          childNode.Nodes.Clear();
        }
      }
    }
    

    This Thread 可能对您有所帮助,因为它显示了如何访问所有子节点、孙子节点等。

    【讨论】:

    • 但是使用TreeViewResume.Nodes.Clear()clears 节点...我遇到的问题是在TreeView 的绘制上。当我在选择 DropDownList 项目后进行调试时,我可以看到每个节点都创建得很好。但是由于我不明白的原因,只绘制了父节点。
    • 啊,我的错。我误解了这个问题。你能为你的 RemplirTableau() 函数提供代码吗?
    【解决方案2】:

    我只需要添加一个 TreeViewResume.DataBind();在重新创建 TreeView 之后:

        protected void Ddl_SelectedIndexChanged(object sender, EventArgs e)
    {
        TreeViewResume.Nodes.Clear();
        RemplirTableau();
        TreeViewResume.DataBind();
    }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多