js code //主要功能是实现复选框的全选择跟非全选
<script type="text/javascript" defer="defer">
function OnTreeNodeChecked() {
var ele = event.srcElement;
if (ele.type == 'checkbox') {
var childrenDivID = ele.id.replace('CheckBox', 'Nodes');
var div = document.getElementById(childrenDivID);
if (div != null) {
var checkBoxs = div.getElementsByTagName('INPUT');
for (var i = 0; i < checkBoxs.length; i++) {
if (checkBoxs[i].type == 'checkbox')
checkBoxs[i].checked = ele.checked;
}
}
OnTreeNodeChildChecked(ele);
}
}
function OnTreeNodeChildChecked(ele) {
//递归处理
var parentDiv = ele.parentElement.parentElement.parentElement.parentElement.parentElement;
var parentChkBox = null;
try {
parentChkBox = document.getElementById(parentDiv.id.replace('Nodes', 'CheckBox'));
}
catch (error) { ; }
if (parentChkBox != null) {
var ChildsChkAll = true;
var Boxs = parentDiv.getElementsByTagName('INPUT');
for (var i = 0; i < Boxs.length; i++) {
if (Boxs[i].type == 'checkbox' && Boxs[i].checked == false) {
ChildsChkAll = false;
}
}
parentChkBox.checked = ChildsChkAll;
OnTreeNodeChildChecked(parentChkBox);
}
}
</script>
html code
<asp:TreeView ID="tvData" runat="server" OnClick="OnTreeNodeChecked();" ShowLines="True">
</asp:TreeView>
C# code
/// <summary>
/// 初始化树
/// </summary>
private void InitTreeview()
{
this.tvData.Nodes.Clear();
TreeNode tn = new TreeNode();
string id = "0";
tn.Text = "测试1";
tn.Value = id;
tn.NavigateUrl = "#";//tn.NavigateUrl = "";等于#不触发事件,等于"",可以触发像SelectedNodeChanged事件
tvData.Nodes.Add(tn);
addTreeNode(tn, dt);
}
//递归初始树
private void addTreeNode(TreeNode tnParent, DataTable dtTreeNode)
{
for (int i = 0; i < dtTreeNode.Rows.Count; i++)
{
TreeNode tn = new TreeNode();
string id = dtTreeNode.Rows[i]["Id"].ToString();
tn.Text = dtTreeNode.Rows[i]["Name"].ToString();//如果需要添加JS事件,可以通过TEXT值来实现,如:tn.text="<span οnclick='close();'>name</span>"
tn.Value = id;
tn.NavigateUrl = "";
//tn.ShowCheckBox = true;
tn.NavigateUrl = "#";//tn.NavigateUrl = "";等于#不触发事件,等于"",可以触发像SelectedNodeChanged事件
tnParent.ChildNodes.Add(tn);
addTreeNode(tn, dt);
}
}