Hi,
SpongeCrane:How do you auto select/deselect all nodes including the parent node?
If you want to do in the client side, you can try to refer the below javascript code:
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ShowCheckBoxes="All" ShowLines="True" onclick="client_OnTreeNodeChecked();" >
</asp:TreeView>
<script language=javascript type="text/javascript">
function client_OnTreeNodeChecked(evt)
{
var obj;
if(window.event) obj = window.event.srcElement;
else obj = (evt ? evt : (window.event ? window.event : null)).target;
var treeNodeFound = false;
var checkedState;
if (obj.tagName == "INPUT" && obj.type == "checkbox" )
{
checkedState = obj.checked;
do
{
obj = obj.parentNode;
}
while (obj.tagName != "TABLE")
var parentTreeLevel = obj.rows[0].cells.length;
//get the current node's parent node.
var tables = obj.parentNode.getElementsByTagName("TABLE");
var numTables = tables.length;
if (numTables >= 1)
{
for (i=0; i < numTables; i++)
{
if (tables[i] == obj)
{
treeNodeFound = true;
i++;
if (i == numTables) return;
}
if (treeNodeFound == true){
var childTreeLevel = tables[i].rows[0].cells.length;
if (childTreeLevel > parentTreeLevel){
var cell = tables[i].rows[0].cells[childTreeLevel - 1];
var inputs = cell.getElementsByTagName("INPUT");
inputs[0].checked = checkedState;
}
else return;
}
}
}
}
} </script>
If you want to implement it in the server side, you can do it the TreeView's TreeNodeCheckChanged event:
protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
if (e.Node.Checked)
{
if (e.Node.ChildNodes.Count != 0)
{
checkchild(e.Node, true);//make all the child node checked
}
else
{
TreeNode tnpre = e.Node.Parent;
bool flag = true;
foreach (TreeNode tn in tnpre.ChildNodes)
{
if (!tn.Checked)// if one child is unchecked, make the parent is unchecked
{
flag = false;
break;
}
}
if (flag)
{
tnpre.Checked = true;
}
}
}
else
{
if (e.Node.Parent != null && e.Node.Parent.Checked)
{
RetrieveParentNode(e.Node, false);
}
checkchild(e.Node, false);// make all child node unchecked
}
}
In addition, when you check/uncheck the checkbox of the TreeNode, the page will not postback, so the TreeNodeCheckChanged event cannot be fired.
you can try use the Javascript to make the page postback when you check/uncheck the checkbox.
function postBackByObject()
{
var o = window.event.srcElement;
if (o.tagName == "INPUT" && o.type == "checkbox")
{
__doPostBack("","");
}
}
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ShowCheckBoxes="All" ShowLines="True" onclick="postBackByObject">