Asp.net 选中父节点时,treeview控件中的子节点将自动选中
我正在使用TreeView控件。使用复选框从数据库绑定值 几乎有三个子节点用于父节点,如Asp.net 选中父节点时,treeview控件中的子节点将自动选中,asp.net,Asp.net,我正在使用TreeView控件。使用复选框从数据库绑定值 几乎有三个子节点用于父节点,如 Parent1 child1 child2 child3 Parent2 child1 child2 child3 我可以绑定数据,这是从3个表都工作得很好。当父节点检查其所有对应的子节点时,我需要一个工具自动检查。如果我单击父节点1,子节点123将被检查。如果我检查child1,则检查child2和child3。如果我选中子项2,则会选中所有子项
Parent1
child1
child2
child3
Parent2
child1
child2
child3
我可以绑定数据,这是从3个表都工作得很好。当父节点检查其所有对应的子节点时,我需要一个工具自动检查。如果我单击父节点1,子节点123将被检查。如果我检查child1,则检查child2和child3。如果我选中子项2,则会选中所有子项3项。怎么做
提前谢谢
Amrutha一个简单的递归函数可以做到这一点
private bool checkTreeNodes(TreeNodeCollection nodes, bool parentChecked)
{
var isChecked = parentChecked;
foreach (TreeNode node in nodes)
{
if (node.Checked || parentChecked)
{
checkTreeNodes(node.Nodes, true);
node.Checked = true;
isChecked = true;
}
else
{
node.Checked = checkTreeNodes(node.Nodes, false);
isChecked = isChecked || node.Checked;
}
}
return isChecked;
}
像这样使用它:
checkTreeNodes(myTree.Nodes, false);
如果选中了父节点,则可以使用下面的javascript函数检查所有子节点;如果至少选中了一个子节点,则检查父节点;否则,则检查父节点:
function OnTreeClick(evt) {
var src = window.event != window.undefined ? window.event.srcElement : evt.target;
var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
var t = GetParentByTagName("table", src);
if (isChkBoxClick) {
var parentTable = GetParentByTagName("table", src);
var nxtSibling = parentTable.nextSibling;
if (nxtSibling && nxtSibling.nodeType == 1) {
if (nxtSibling.tagName.toLowerCase() == "div") {
CheckUncheckChildren(parentTable.nextSibling, src.checked);
}
}
CheckUncheckParents(src, src.checked);
}
}
function CheckUncheckChildren(childContainer, check) {
var childChkBoxes = childContainer.getElementsByTagName("input");
var childChkBoxCount = childChkBoxes.length;
for (var i = 0; i < childChkBoxCount; i++) {
childChkBoxes[i].checked = check;
}
}
function CheckUncheckParents(srcChild, check) {
var parentDiv = GetParentByTagName("div", srcChild);
var parentNodeTable = parentDiv.previousSibling;
if (parentNodeTable) {
var checkUncheckSwitch;
var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
if (isAllSiblingsChecked) {
checkUncheckSwitch = true;
}
else {
checkUncheckSwitch = false;
}
var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
if (inpElemsInParentTable.length > 0) {
var parentNodeChkBox = inpElemsInParentTable[0];
parentNodeChkBox.checked = checkUncheckSwitch;
CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
}
}
}
function AreAllSiblingsChecked(chkBox) {
var parentDiv = GetParentByTagName("div", chkBox);
var childCount = parentDiv.childNodes.length;
var k = 0;
for (var i = 0; i < childCount; i++) {
if (parentDiv.childNodes[i].nodeType == 1) {
if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") {
var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
//if any of sibling nodes are not checked, return false
if (prevChkBox.checked) {
//add each selected node one value
k = k + 1;
}
}
}
}
//Finally check any one of child node is select if selected yes then return ture parent node check
if (k > 0) {
return true;
}
else {
return false;
}
}
function GetParentByTagName(parentTagName, childElementObj) {
var parent = childElementObj.parentNode;
while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {
parent = parent.parentNode;
}
return parent;
}
函数OnTreeClick(evt){
var src=window.event!=window.undefined?window.event.src元素:evt.target;
var isChkBoxClick=(src.tagName.toLowerCase()=“输入”和&src.type==“复选框”);
var t=GetParentByTagName(“表”,src);
如果(单击){
var parentTable=GetParentByTagName(“表”,src);
var nxtSibling=parentTable.nextSibling;
if(nxtSibling&&nxtSibling.nodeType==1){
if(nxtSibling.tagName.toLowerCase()=“div”){
CheckUncheckChildren(parentTable.nextSibling,src.checked);
}
}
CheckUncheckParents(src,src.checked);
}
}
函数CheckUncheckChildren(childContainer,check){
var childChkBoxes=childContainer.getElementsByTagName(“输入”);
var childChkBoxCount=childChkBoxes.length;
对于(变量i=0;i0){
var parentNodeChkBox=inpelmsinparenttable[0];
parentNodeChkBox.checked=checkUncheckSwitch;
CheckUncheckParents(parentNodeChkBox,checkUncheckSwitch);
}
}
}
功能区同级校验(chkBox){
var parentDiv=GetParentByTagName(“div”,chkBox);
var childCount=parentDiv.childNodes.length;
var k=0;
对于(变量i=0;i0){
返回true;
}
否则{
返回false;
}
}
函数GetParentByTagName(parentTagName,childElementObj){
var parent=childElementObj.parentNode;
while(parent.tagName.toLowerCase()!=parentTagName.toLowerCase()){
parent=parent.parentNode;
}
返回父母;
}
我使用此javascript解决了我的问题。您好,谢谢您的回复。我尝试了您的代码,但出现了错误,例如错误30“admin\u Add\u Role.checkTreeNodes(System.Web.UI.WebControls.TreeNodeCollection,bool)的最佳重载方法匹配)'有一些无效参数错误31参数1:无法从'method group'转换为'System.Web.UI.WebControl.TreeNodeCollection'checkTreeNodes,如您在函数中看到的,它将TreeNodeCollection作为参数。您的错误表示您正在传递树的TreeNodeCollection。