前台:
<asp:TreeView ID="tree" runat="server" MaxDataBindDepth="2" OnTreeNodePopulate="tree_TreeNodePopulate" PopulateNodesFromClient="true"
EnableClientScript="true" ExpandDepth="1" ShowCheckBoxes="All" ShowLines="True" Width="80%">
</asp:TreeView>
JS 代码:
<script language="javascript" type="text/javascript">
function onTreeClick()
{
var obj = event.srcElement;
if( obj.tagName != "INPUT" ) return;
if( obj.type != "checkbox" ) return;
//
if( obj.checked )setParentChecked( obj );
var id = obj.id;
id = id.substring( 0,id.indexOf( "CheckBox"));
//
var div = document.all( id + "Nodes" );
if( div == null )
{
DoSelectRightItemID(obj);
return;//没有子结点
}
//
CheckChild( div , obj.checked );
}
function CheckChild( divID , checked )
{
var objchild = divID.children;
var count = objchild.length;
for(var i=0;i <objchild.length;i++)
{
var tempObj = objchild[i];
if(tempObj.tagName== "INPUT" && tempObj.type == "checkbox")
{
tempObj.checked = checked;
}
CheckChild(tempObj,checked);
}
}
function setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode, "div");
if(objParentDiv==null || objParentDiv == "undefined")
{
return;
}
var objID = objParentDiv.getAttribute( "ID");
objID = objID.substring(0,objID.indexOf( "Nodes"));
objID = objID+ "CheckBox";
var objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "undefined")
{
return;
}
if(objParentCheckBox.tagName!= "INPUT" && objParentCheckBox.type == "checkbox")
return;
objParentCheckBox.checked = true;
setParentChecked(objParentCheckBox);
}
function public_GetParentByTagName(element, tagName)
{
var parent = element.parentNode;
var upperTagName = tagName.toUpperCase();
//如果这个元素还不是想要的tag就继续上溯
while (parent && (parent.tagName.toUpperCase() != upperTagName))
{
parent = parent.parentNode ? parent.parentNode : parent.parentElement;
}
return parent;
}
</script>
<script>
function DoSelectRightID( obj )
{
var tr = obj.parentNode.parentNode;
for(var i=2;i< tr.cells.length;i++ )
{
var td = tr.cells[i];
if( td.childNodes.length == 2 )
{
td.childNodes[0].checked = true;
break;
}
}
}
function DoSelectRightItemID( obj )
{
if( obj.value.length == 1) return;
var tr = obj.parentNode.parentNode;
//alert( tr.innerHTML);
for(var i=3;i< tr.cells.length;i++ )
{
var td = tr.cells[i];
if( td.childNodes.length == 2 )
{
if( td.childNodes[0].value != null && td.childNodes[0].value.length == 1 )
{
td.childNodes[0].checked = obj.checked;
//break;
}
}
}
}
</script>
后台:
先添加根节点
/// <summary>
/// 加载一级菜单
/// </summary>
/// <param name="dt"></param>
/// <param name="parentid"></param>
private void LoadMenuTree(string ParentId)
{
DataSet ds = “记录集”
DataTable dt = ds.Tables[0];
DataRow[] dr = dt.Select("parentid = '" + ParentId+ "'");
foreach (DataRow drow in dr)
{
TreeNode tn = new TreeNode(drow["MenuName"].ToString());
tree.Nodes.Add(tn);
tn.Value ="";
tn.ImageUrl = "";
tn.SelectAction = TreeNodeSelectAction.Expand;
tn.PopulateOnDemand = true;
tn.Expanded = false;
tn.ToolTip = "0";
tn.Target = "_self";
}
}
/// <summary>
/// 加载子菜单
/// </summary>
/// <param name="dt"></param>
/// <param name="parentNode"></param>
private void LoadMenuTree(DataTable dt, TreeNode parentNode)
{
DataRow[] dr = dt.Select("parentid = '" + parentNode.Value + "'");
foreach (DataRow drow in dr)
{
TreeNode tn = new TreeNode();
parentNode.ChildNodes.Add(tn);
tn.ToolTip = "";
tn.ImageToolTip = "";
tn.Value = Menuid;
tn.ImageToolTip = "";
tn.ImageUrl = "";
tn.SelectAction = TreeNodeSelectAction.None;
LoadMenuTree(dt, tn);
}
}
//展开树加载
protected void tree_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
DataSet ds ="记录集"
DataTable dt = ds.Tables[0];
if (e.Node.ChildNodes.Count == 0)
{
LoadMenuTree(dt, e.Node);
}
}