树视图父节点应在Treeview中默认选择其子节点

时间:2014-12-17 05:12:24

标签: c# treeview

我有一个treeview控件,每个节点都有一个复选框。每个节点代表一个部门。我希望默认情况下应该选择主要部门及其子部门。 以下是控制代码:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
       <asp:LinkButton runat="server" ID="lnkSelectAllDepartments" Text="Select All" OnClick="lnkSelectAllDepartments_Click"  Font-Bold="false" Font-Underline="true"></asp:LinkButton>|
           <span class="labelText" style="font-weight:bold"> | </span>
              <asp:LinkButton runat="server" ID="lnkDeselectAllDepartments" Text="Deselect All" OnClick="lnkDeselectAllDepartments_Click"  Font-Bold="false" Font-Underline="true"></asp:LinkButton>
                  <br />
                  <br />
                      <asp:CheckBoxList ID="listDepartment" runat="server" Height="120px" RepeatDirection="Vertical" RepeatLayout="Flow"> </asp:CheckBoxList>
                      <asp:TreeView ID="tvDepartments" runat="server" ShowCheckBoxes="All" ShowExpandCollapse="true" ExpandDepth=0 NodeStyle-ForeColor="Black" ></asp:TreeView>
     </ContentTemplate>
</asp:UpdatePanel> 

以下代码适用于代码:

/*Added for TreeView control...*/
string rootDepartmentName = ConfigurationReader.ParentDepartmentName; /
if (lstDepartmentDetails.Any(item => item.Name.CompareString(rootDepartmentName) && item.ParentName.IsNullOrEmpty()))
{
    clsRelFilter rootDepartment = lstDepartmentDetails.FirstOrDefault(item => item.Name.CompareString(rootDepartmentName) && item.ParentName.IsNullOrEmpty());
    TreeNode ParentNode = new TreeNode(rootDepartment.Name, rootDepartment.Uri);

    AddChildDepartmentsToNode(ParentNode, rootDepartment, lstDepartmentDetails);
    tvDepartments.Nodes.Add(ParentNode);
}

1 个答案:

答案 0 :(得分:0)

这是任何基于树的控制中​​的经典问题。您可以使用某种形式的递归,这样在每个父复选框选择时,您递归地遍历该节点的所有子节点(直到叶级)并将它们的复选框标记为已选中。你可以先深入,直到你没有更多的后代,然后爬回父母等等。

另外,你也应该考虑祖先。如果取消选中某个节点的所有子节点,您应该取消选中父节点,该怎么办?或者,如果您检查后代,是否应该上升树并检查祖先节点?