记得以前写过一个代码。需要在TreeView前面的复选框选中时触发后台事件,从而引起页面其他部分数据发生改变。
当时记得好像TreeView前面的复选框的可以引发选中项改变事件,而在某项由选中变成不选中,或者由不选中变成选中时是不能触发后台事件的。
下面把它记下来,希望以后再用到时会有所帮助
1.在页面上需要设置TreeView父项和子项的、
Checked="True" 和ShowCheckBox="True"
2.在绑定TreeVeiw时,给它添加onclick事件代码如下
TreeView1.Attributes.Add("onclick", "postBackByObject()");//添加点击事件
注:postBackByObject是一个JavaScript函数具体代码如下
// 点击复选框时触发事件(此事件会引起回发) function postBackByObject() { var o = window.event.srcElement; if (o.tagName == "INPUT" && o.type == "checkbox") { __doPostBack("UpdatePanel1",""); //此处前面是两个下划线(UpdatePanel1处是因为用了UpdatePanel所以才写这个控件ID的) } }
3.postBackByObject函数引发的回传最终是触发TreeNodeCheckChanged事件的。下面只贴代码。
/// <summary> /// 左边树形控件选择项改变 /// 判断是否选择,加入右边控件 /// </summary> protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { TreeNode node = TreeView1.SelectedNode; if (node != null && node.Parent != null) //选中节点不为空,非父节点。 { //添加或移除项 } else //点击的是复选框 { if (node.ChildNodes.Count > 0) //选中的是父节点的框 { SetChildChecked(node); //复选框事件 } else //选中的是子节点 { //添加或移除项 } } }
/// <summary> /// 左边树形控件选择项改变 /// 判断是否选择,加入右边控件 /// </summary> protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { SetChildChecked(e.Node);
// 判断是否是根节点 if (e.Node.Parent != null) { e.Node.Parent.Checked = e.Node.Checked; .......... //添加或移除项
} } /// <summary> /// 根据父节点状态设置子节点的状态 /// </summary> /// <param name="parentNode"></param> private void SetChildChecked(TreeNode parentNode) { foreach (TreeNode node in parentNode.ChildNodes) { node.Checked = parentNode.Checked; .......... //添加或移除项 if (node.ChildNodes.Count > 0) { SetChildChecked(node); } } }
|
请发表评论