Aqui, o controle TreeView do asp.net2.0 é usado em combinação com JavaScript para implementar algumas funções da árvore de permissões.
Suponha que existam as três regras a seguir na árvore de permissões:
1. Se o nó estiver acessível, seu nó pai também deverá estar acessível;
2. Se o nó estiver acessível, seus nós filhos também poderão ser acessados;
3. Se o nó estiver inacessível, seus nós filhos também estarão inacessíveis.
O código é o seguinte:
//Obtém o elemento pai do tagName especificado
função public_GetParentByTagName(elemento, tagName)
{
var pai = element.parentNode;
var UpperTagName = tagName.toUpperCase();
//Se este elemento não for a tag desejada, continue rastreando
while (pai && (parent.tagName.toUpperCase() != UpperTagName))
{
pai = pai.parentNode? pai.parentNode: pai.parentElement;
}
retornar pai;
}
//Definir o nó pai do nó verificado - se o nó estiver acessível, seu nó pai também deverá estar acessível
função setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "indefinido")
{
retornar;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Nós"));
objID = objID+"CheckBox";
var objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "indefinido")
{
retornar;
}
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "caixa de seleção")
retornar;
objParentCheckBox.checked = verdadeiro;
setParentChecked(objParentCheckBox);
}
//Defina o nó filho do nó como desmarcado - se o nó estiver inacessível, seus nós filhos também estarão inacessíveis.
função setChildUnChecked(divID)
{
var objchild = divID.filhos;
var contagem = objchild.length;
for(var i=0;i
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "caixa de seleção")
{
tempObj.checked = falso;
}
setChildUnChecked(tempObj);
}
}
//Defina o nó filho do nó verificado - se o nó puder ser acessado, seus nós filhos também poderão ser acessados
função setChildChecked(divID)
{
var objchild = divID.filhos;
var contagem = objchild.length;
for(var i=0;i
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "caixa de seleção")
{
tempObj.checked = verdadeiro;
}
setChildChecked(tempObj);
}
}
//aciona evento
função CheckEvent()
{
var objNode = event.srcElement;
if(objNode.tagName!="INPUT" || objNode.type!="caixa de seleção")
retornar
se(objNode.checked==true)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodes");
if(objParentDiv==null || objParentDiv == "indefinido")
{
retornar;
}
setChildChecked(objParentDiv);
}
outro
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodes");
if(objParentDiv==null || objParentDiv == "indefinido")
{
retornar;
}
setChildUnChecked(objParentDiv);
}
}
Em seguida, vincule o TreeView ao evento js no evento page_load:
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");