Здесь элемент управления TreeView asp.net2.0 используется в сочетании с JavaScript для реализации некоторых функций дерева разрешений.
Предположим, что в дереве разрешений существуют следующие три правила:
1. Если узел доступен, его родительский узел также должен быть доступен;
2. Если узел доступен, то к его дочерним узлам также можно получить доступ;
3. Если узел недоступен, его дочерние узлы также недоступны.
Код выглядит следующим образом:
//Получаем родительский элемент указанного tagName
функция public_GetParentByTagName (элемент, имя тега)
{
вар родительский = element.parentNode;
вар UpperTagName = tagName.toUpperCase();
//Если этот элемент не является желаемым тегом, продолжаем трассировку вверх
while (родительский && (parent.tagName.toUpperCase() != UpperTagName))
{
родитель = родительский.родительскийузел? родительский.родительскийузел: родительский.родительскийэлемент;
}
вернуть родителя;
}
//Установка родительского узла узла. Cheched — если узел доступен, его родительский узел также должен быть доступен.
функция setParentChecked(objNode)
{
вар objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "не определено")
{
возвращаться;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Узлы"));
objID = objID+"Флажок";
вар objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "не определено")
{
возвращаться;
}
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "флажок")
возвращаться;
objParentCheckBox.checked = правда;
setParentChecked(objParentCheckBox);
}
//Устанавливаем дочерний узел узла как отключенный — если узел недоступен, его дочерние узлы также будут недоступны.
функция setChildUnChecked (divID)
{
вар objchild = divID.children;
вар счетчик = objchild.length;
for(var i=0;i<objchild.length;i++)
{
вар tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "флажок")
{
tempObj.checked = ложь;
}
setChildUnChecked (tempObj);
}
}
//Устанавливаем дочерний узел узла как проверенный — если к узлу можно получить доступ, его дочерние узлы также будут доступны
функция setChildChecked(divID)
{
вар objchild = divID.children;
вар счетчик = objchild.length;
for(var i=0;i<objchild.length;i++)
{
вар tempObj = objchild[i];
if(tempObj.tagName=="INPUT" && tempObj.type == "флажок")
{
tempObj.checked = правда;
}
setChildChecked (tempObj);
}
}
// запускаем событие
функция CheckEvent()
{
var objNode = event.srcElement;
if(objNode.tagName!="INPUT" || objNode.type!="флажок")
return
if(objNode.checked==true)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Узлы");
if(objParentDiv==null || objParentDiv == "не определено")
{
возвращаться;
}
setChildChecked (objParentDiv);
}
еще
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Узлы");
if(objParentDiv==null || objParentDiv == "не определено")
{
возвращаться;
}
setChildUnChecked (objParentDiv);
}
}
Затем привяжите TreeView к событию js в событии page_load:
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");