Hi !
I have a
RadTreeview to which I have set properties
CheckBoxes="true" and
OnClientNodeChecking="ClientNodeChecking".
Now, at server-side
RadTreeViewMain_NodeDataBound() event I am setting
e.Node.Checkable = false; for all nodes.
Then I am checking
e.Node.Category from database for each node and if node is of
"Option" category, then I am setting
e.Node.Checkable = true;
at client-side I have defined a
javascript function which is used to
uncheck all of the child nodes of the node on
unchecking itself.
Surprisingly, it works fine fist time when I check the node and uncheck the same. But after that if I click the same node to make it checked, it shows it is already checked, while in UI it is not checked.
Javascript functions are as below :
function ClientNodeChecking(sender, eventArgs) {
var node = eventArgs.get_node();
var parent = node.get_parent();
var t = node.get_treeView();
var preventCheck = false;
var isMultiSelect = parent.get_attributes().getAttribute("multiSelect");
var allNodes = parent.get_allNodes();
var value = node.get_value();
var checkstate = node.get_checkState();
var level = node.get_level();
var errormessage = "";
if (checkstate == 1) {
t.trackChanges();
node.uncheck();
getAllChildUnchecked(node);
t.commitChanges();
return;
}
if (level > 2) {
var grandParent = parent.get_parent();
var grandParentCategory = grandParent.get_category();
if (grandParentCategory == "Option" && !grandParent.get_checked()) {
// you can add simple alert message here..
//errormessage = "The parent node is not checked.";
//openDialogPreventChecked(errormessage);
eventArgs.set_cancel(true);
return;
}
}
if (allNodes.length > 0) {
for (var i = 0; i < allNodes.length; i++) {
var childnode = allNodes[i];
var childvalue = childnode.get_value();
if (childnode.get_checked() && isMultiSelect == "false" && value != childvalue) {
preventCheck = true;
break;
}
}
}
if (preventCheck) {
// you can add simple alert message here..
eventArgs.set_cancel(true);
//errormessage = "This is not multi-select type of question";
//openDialogPreventChecked(errormessage);
}
}
function getAllChildUnchecked(node) {
var childNodes = node.get_allNodes();
if (childNodes.length > 0) {
for (var i = 0; i < childNodes.length; i++) {
var childnode = childNodes[i];
childnode.uncheck();
getAllChildUnchecked(childnode);
}
}
}
Kindly provide me some efficient solution. Awaiting for your valuable response.
Thanks,
Dev