ASP.NET 2.0 TreeView имеет множество встроенных функций, таких как отображение флажков для всех узлов дерева. Форматирование, стиль и т. д. на уровне узла. Включение свойства ShowCheckBoxes="All" устанавливает флажок для отображения флажка для всех узлов. Другими вариантами являются Leaf, None, Parent и Root, которые показывают флажки на соответствующих уровнях узла. None не отображает флажки.
Когда мы устанавливаем ShowCheckBoxes="All", мы хотели бы предоставить возможность, позволяющую людям устанавливать флажок на корневом узле, чтобы все остальные флажки устанавливались автоматически. По сути, когда проверяется родительский узел, все дочерние узлы должны проверяться автоматически.
Было бы интуитивно понятно выполнить эту задачу на стороне клиента, не прибегая к обратной передаче.
Следующий фрагмент кода помогает добиться того же.
Объявление TreeView
<asp:TreeView ID="TreeView1" Runat="server" DataSourceID="XmlDataSource1" onclick="client_OnTreeNodeChecked();" ShowCheckBoxes="all">
<DataBindings>
<asp:TreeNodeBinding DataMember="Category" ValueField="ID" TextField="Name"></asp:TreeNodeBinding>
<asp:TreeNodeBinding DataMember="Description" ValueField="Value" TextField ="Value"></asp:TreeNodeBinding>
</DataBindings>
</asp:TreeView>
В приведенном выше коде объявления TreeView вы можете найти свойство onclick="client_OnTreeNodeChecked();" событие, которое на самом деле является функцией JavaScript, выполняющей эту задачу.
Фрагмент кода Javascript выглядит следующим образом: -
<script Language="javascript" type="text/javascript">
функция client_OnTreeNodeChecked()
{
вар obj = window.event.srcElement;
вар TreeNodeFound = ложь;
вар проверенное состояние;
if (obj.tagName == "INPUT" && obj.type == "флажок") {
вар TreeNode = объект;
ПровереноСостояние = TreeNode.checked;
делать
{
объект = объект.parentElement;
} while (obj.tagName != "ТАБЛИЦА")
var родительскийTreeLevel = obj.rows[0].cells.length;
var родительскийTreeNode = obj.rows[0].cells[0];
var table = obj.parentElement.getElementsByTagName("TABLE");
вар numTables = table.length
если (numTables >= 1)
{
для (я=0; я <numTables; я++)
{
если (таблицы[i] == obj)
{
TreeNodeFound = Истина;
я++;
если (я == numTables)
{
возвращаться;
}
}
если (treeNodeFound == true)
{
var childTreeLevel = table[i].rows[0].cells.length;
если (childTreeLevel > родительскийTreeLevel)
{
var cell = table[i].rows[0].cells[childTreeLevel - 1];
var inputs = cell.getElementsByTagName("INPUT");
inputs[0].checked = проверенное состояние;
}
еще
{
возвращаться;
}
}
}
}
}
}
</скрипт>