我有一个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);
}
答案 0 :(得分:0)
这是任何基于树的控制中的经典问题。您可以使用某种形式的递归,这样在每个父复选框选择时,您递归地遍历该节点的所有子节点(直到叶级)并将它们的复选框标记为已选中。你可以先深入,直到你没有更多的后代,然后爬回父母等等。
另外,你也应该考虑祖先。如果取消选中某个节点的所有子节点,您应该取消选中父节点,该怎么办?或者,如果您检查后代,是否应该上升树并检查祖先节点?