html:要注意 这里的 ShowCheckBoxes="ALL" 为所有的节点添加CheckBox
<asp:TreeView ID="TreeView1" runat="server" Height="178px"
Width="96px" ShowLines="True" ShowCheckBoxes="All">
</asp:TreeView>
引用 javascript

<script type="text/jscript" language="javascript">...

//这个函数为刷新页面实现功能
function foo()

...{
var o = window.event.srcElement;
if (o.tagName == "INPUT" && o.type == "checkbox")

...{
__doPostBack("","");
}
}

//下面这个为不刷新页面实现
function ShowLegend(ControlID,LegendInfo)

...{
alert(LegendInfo);
var para = "LegendInfo="+LegendInfo + "&Visible=" + document.all(ControlID).checked;

var myAjax = new Ajax.Request('../ajax/WebFormChangeLegendVisible.aspx',...{method: 'get', parameters:para, onComplete: RefreshMap});
}

function RefreshMap(request)

...{
var content = request.responseText;
parent.mapview.document.forms[0].submit();
}

function OnTreeNodeChecked()

...{
var element = window.event.srcElement;
if (!IsCheckBox(element))
return;
var isChecked = element.checked;
var tree = TV2_GetTreeById("TreeView1");
var node = TV2_GetNode(tree,element);

TV2_SetChildNodesCheckStatus(node,isChecked);
//alert(element.id);

var parent = TV2_GetParentNode(tree,node);
TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked);
document.all("txtSelectID").value = ""
var aCheckBox = document.getElementsByTagName("input");
for (var i=0;i<aCheckBox.length;i++)

...{
if(aCheckBox[i].type == "checkbox")

...{
if(aCheckBox[i].checked)

...{
var sID = aCheckBox[i].id;
sID = sID.substring(0,sID.indexOf("CheckBox"));
var obja = document.getElementById(sID.replace('n','t'));
var sSelectID = obja.href.replace("javascript:__doPostBack('TreeView1','s","")
sSelectID = sSelectID.replace("')","")
//sSelectID = sSelectID.replace("//","-")
var aSelectID = sSelectID.split("/")
document.all("txtSelectID").value = aSelectID[aSelectID.length-1]+";"+document.all("txtSelectID").value;
//document.all("txtSelectID").value = sSelectID+";"+document.all("txtSelectID").value;
}
}
}
var sAllSelectID = document.all("txtSelectID").value;
if(sAllSelectID!="")
sAllSelectID = sAllSelectID.substring(0,sAllSelectID.length-1);
//alert(sAllSelectID);
// var para = "LegendInfo="+sAllSelectID;
// var myAjax = new Ajax.Request('../ajax/WebFormChangeLegendVisible.aspx',{method: 'get', parameters:para, onComplete: RefreshMap});

}
//set child nodes checkbox status
function TV2_SetChildNodesCheckStatus(node,isChecked)

...{
var childNodes = TV2i_GetChildNodesDiv(node);
if(childNodes == null)
return;

var inputs = WebForm_GetElementsByTagName(childNodes,"INPUT");
if(inputs == null || inputs.length == 0)
return;

for(var i = 0; i < inputs.length; i++)

...{
if(IsCheckBox(inputs[i]))
inputs[i].checked = isChecked;
}
}

//change parent node checkbox status after child node changed
function TV2_NodeOnChildNodeCheckedChanged(tree,node,isChecked)

...{
if(node == null)
return;

var childNodes = TV2_GetChildNodes(tree,node);

if(childNodes == null || childNodes.length == 0)
return;

var isAllSame = true;

for(var i = 0; i < childNodes.length; i++)

...{
var item = childNodes[i];
var value = TV2_NodeGetChecked(item);

if(isChecked != value)

...{
isAllSame = false;
break;
}
}

var parent = TV2_GetParentNode(tree,node);
if(isAllSame)

...{
TV2_NodeSetChecked(tree,node,isChecked);
TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked);
}
else

...{
TV2_NodeSetChecked(tree,node,false);
TV2_NodeOnChildNodeCheckedChanged(tree,parent,false);
}
}

//get node relative element(etc. checkbox)
function TV2_GetNode(tree,element)

...{
var id = element.id.replace(tree.id,"");
id = id.toLowerCase().replace(element.type,"");
id = tree.id + id;

var node = document.getElementById(id);
if(node == null) //leaf node, no "A" node
return element;
return node;
}

//get parent node
function TV2_GetParentNode(tree,node)

...{
var div = WebForm_GetParentByTagName(node,"DIV");

//The structure of node: <table>information of node</table><div>child nodes</div>
var table = div.previousSibling;
if(table == null)
return null;

return TV2i_GetNodeInElement(tree,table);
}

//get child nodes array
function TV2_GetChildNodes(tree,node)

...{
if(TV2_NodeIsLeaf(node))
return null;

var children = new Array();
var div = TV2i_GetChildNodesDiv(node);
var index = 0;

for(var i = 0; i < div.childNodes.length; i++)

...{
var element = div.childNodes[i];
if(element.tagName != "TABLE")
continue;

var child = TV2i_GetNodeInElement(tree,element);
if(child != null)
children[index++] = child;
}
return children;
}

function TV2_NodeIsLeaf(node)

...{
return !(node.tagName == "A"); //Todo
}

function TV2_NodeGetChecked(node)

...{
var checkbox = TV2i_NodeGetCheckBox(node);
return checkbox.checked;
}

//判断:只要该节点有一个字节点被选中,则该节点一定被选中
function TV2_NodeSetChecked(tree,node,isChecked)

...{
var checkbox = TV2i_NodeGetCheckBox(node);
if(checkbox != null)

...{
var childNodes = TV2_GetChildNodes(tree,node);
for(var i = 0; i < childNodes.length; i++)

...{
var item = childNodes[i];
var value = TV2_NodeGetChecked(item);
if(value)

...{
isChecked = true ;
break;
}
}
checkbox.checked = isChecked;
}
}

function IsCheckBox(element)

...{
if(element == null)
return false;
return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox");
}

//get tree
function TV2_GetTreeById(id)

...{
return document.getElementById(id);
}

//////////////////////////////////////////////////////////////////////////////////////////////
//private mothods, with TV2i_ prefix
//////////////////////////////////////////////////////////////////////////////////////////////

//get div contains child nodes
function TV2i_GetChildNodesDiv(node)

...{
if(TV2_NodeIsLeaf(node))
return null;

var childNodsDivId = node.id + "Nodes";
return document.getElementById( childNodsDivId );
}

//find node in element
function TV2i_GetNodeInElement(tree,element)

...{
var node = TV2i_GetNodeInElementA(tree,element);
if(node == null)

...{
node = TV2i_GetNodeInElementInput(tree,element);
}
return node;
}

//find "A" node
function TV2i_GetNodeInElementA(tree,element)

...{
var as = WebForm_GetElementsByTagName(element,"A");
if(as== null || as.length == 0)
return null;

var regexp = new RegExp("^" + tree.id + "n/d+$");

for(var i = 0; i < as.length; i++)

...{
if(as[i].id.match(regexp))

...{
return as[i];
}
}
return null;
}

//find "INPUT" node
function TV2i_GetNodeInElementInput(tree,element)

...{
var as = WebForm_GetElementsByTagName(element,"INPUT");
if(as== null || as.length == 0)
return null;

var regexp = new RegExp("^" + tree.id + "n/d+");
for(var i = 0; i < as.length; i++)

...{
if(as[i].id.match(regexp))

...{
return as[i];
}
}
return null;
}

//get checkbox of node
function TV2i_NodeGetCheckBox(node)

...{
if(IsCheckBox(node))
return node;

var id = node.id + "CheckBox";
return document.getElementById(id);
}


function showtab(m,n,count)...{
var strPic1='url(../image/1.bmp)';
var strPic2='url(../image/2.bmp)';

if (m==8) ...{
strPic1='url(../image/switch03_1.gif)';
strPic2='url(../image/switch03_2.gif)'; }


for(var i=1;i<=count;i++)...{

if (i==n)...{
getObject(m+'_'+i).style.background=strPic1;
getObject('tab_'+m+'_'+i).style.display='';
}

else ...{
getObject(m+'_'+i).style.background=strPic2;
getObject('tab_'+m+'_'+i).style.display='none';
}
}
}

function getObject(objectId) ...{

if(document.getElementById && document.getElementById(objectId)) ...{
// W3C DOM
return document.getElementById(objectId);

} else if (document.all && document.all(objectId)) ...{
// MSIE 4 DOM
return document.all(objectId);

} else if (document.layers && document.layers[objectId]) ...{
// NN 4 DOM.. note: this won't find nested layers
return document.layers[objectId];

} else ...{
return false;
}
} // getObject

function Init()

...{
//var w = document.body.scrollWidth;
var w = document.body.clientWidth;
//var h = document.body.scrollHeight;
var h = document.body.clientHeight;
getObject("tabTree").style.height = h-90;
getObject("divHRTree").style.height=h-100;
}

</script>


cs代码:
protected void Page_Load(object sender, EventArgs e)

...{
if (!Page.IsPostBack)

...{
TreeView1.Attributes.Add("onclick", "OnTreeNodeChecked()");
}
}

protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)

...{

SetChildChecked ( e.Node );

}
private void SetChildChecked ( TreeNode p_Node )


...{
foreach ( TreeNode _n in p_Node.ChildNodes )


...{
_n.Checked = p_Node.Checked;

if ( _n.ChildNodes.Count > 0 )


...{
SetChildChecked( _n );

}

}

}