Resulta que los checkbox de un control TreeView no genera el postback automaticamente, y el evento OnTreeNodeCheckChanged sucede entre envios al servidor o por lo menos eso entendi en el MSDN. Asi que buscando en la red logre resolver este inconveniente...
Pues bn aca les dejo el codigo en ASP y C# para que lo utilicen en sus paginas web.
------------Codigo ASP del control
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="AJAXEnabledWebApplication3.WebUserControl1" %>
<table style="width: 194px">
<tr>
<td>
</td>
<td colspan="2" rowspan="3">
<asp:panel id="pnlFechas" runat="server" scrollbars="Vertical" width="200px" height="100px" visible="False" bordercolor="DarkGray" borderstyle="Solid" borderwidth="2px">
<asp:TreeView ID="TreeViewDemo" runat="server" Font-Names="Tahoma" Font-Size="11px" ForeColor="Black" ExpandDepth="3" ShowLines="True"
ShowCheckBoxes="All" OnSelectedNodeChanged="TreeViewDemo_SelectedNodeChanged" OnTreeNodeCheckChanged="TreeViewDemo_TreeNodeCheckChanged" OnTreeNodeCollapsed="TreeViewDemo_TreeNodeCollapsed" OnTreeNodeExpanded="TreeViewDemo_TreeNodeExpanded"
>
<nodes>
<asp:treenode text="Root" value="Root">
<asp:treenode text="2008" value="2008">
<asp:treenode text="enero" value="enero">
<asp:treenode text="25" value="25"></asp:TreeNode>
</asp:TreeNode>
<asp:treenode text="febrero" value="febrero">
<asp:treenode text="1" value="1"></asp:TreeNode>
<asp:treenode text="10" value="10"></asp:TreeNode>
<asp:treenode text="12" value="12"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:treenode text="2009" value="2009">
<asp:treenode text="julio" value="julio">
<asp:treenode text="18" value="18"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</nodes>
</asp:TreeView>
</asp:Panel>
<asp:label id="lblMensaje" runat="server" forecolor="DarkRed"></asp:Label></td>
</tr>
<tr>
<td>
<asp:button id="btnSelecFechas" runat="server" text="Seleccione Fechas" onclick="btnSelecFechas_Click"></td>
</tr>
<tr>
<td>
</td>
</tr>
</table>
------------------codigo C# del Control
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace AJAXEnabledWebApplication3
{
public partial class WebUserControl1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TreeViewDemo.Attributes.Add("onclick", "OnTreeClick(event)");
}
}
protected void btnSelecFechas_Click(object sender, EventArgs e)
{
if (pnlFechas.Visible)
{
pnlFechas.Visible = false;
}
else
{
pnlFechas.Visible = true;
}
}
protected void TreeViewDemo_SelectedNodeChanged(object sender, EventArgs e)
{
}
protected void TreeViewDemo_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
}
protected void TreeViewDemo_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
{
}
protected void TreeViewDemo_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
}
}
}
---------Codigo ASP de la pagina
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="AJAXEnabledWebApplication3.WebForm1" %>
<%@ Register Src="WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script language="javascript" type="text/javascript">
//************************** Treeview Parent-Child check behaviour ****************************//
function OnTreeClick(evt)
{
var src = window.event != window.undefined ? window.event.srcElement : evt.target;
var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
if(isChkBoxClick)
{
var parentTable = GetParentByTagName("table", src);
var nxtSibling = parentTable.nextSibling;
if(nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node
{
if(nxtSibling.tagName.toLowerCase() == "div") //if node has children
{
//check or uncheck children at all levels
CheckUncheckChildren(parentTable.nextSibling, src.checked);
}
}
//check or uncheck parents at all levels
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;
if(check) //checkbox checked
{
var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
if(isAllSiblingsChecked)
checkUncheckSwitch = true;
else
return; //do not need to check parent if any child is not checked
}
else //checkbox unchecked
{
checkUncheckSwitch = false;
}
var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
if(inpElemsInParentTable.length > 0)
{
var parentNodeChkBox = inpElemsInParentTable[0];
parentNodeChkBox.checked = checkUncheckSwitch;
//do the same recursively
CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
}
}
}
function AreAllSiblingsChecked(chkBox)
{
var parentDiv = GetParentByTagName("div", chkBox);
var childCount = parentDiv.childNodes.length;
for(var i=0; i<childCount; i++)
{
if(parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node
{
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)
{
return false;
}
}
}
}
return true;
}
//utility function to get the container of an element by tagname
function GetParentByTagName(parentTagName, childElementObj)
{
var parent = childElementObj.parentNode;
while(parent.tagName.toLowerCase() != parentTagName.toLowerCase())
{
parent = parent.parentNode;
}
return parent;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:scriptmanager id="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:updateprogress id="UpdateProgress1" runat="server">
<progresstemplate>
<img src="loading.gif" />
Cargando...
</progresstemplate>
</asp:UpdateProgress>
<asp:updatepanel id="UpdatePanel1" runat="server">
<contenttemplate>
<uc1:webusercontrol1 id="WebUserControl1_1" runat="server">
</contenttemplate>
</asp:UpdatePanel>
<br />
</div>
</form>
</body>
</html>
-------------Codigo C# de la pagina
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace AJAXEnabledWebApplication3
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}