首页  ·  知识 ·  云计算
Asp.Net选择TreeView前面的复选框引起回发
网友     综合  编辑:dezai   图片来源:网络
需要在TreeView前面的复选框选中时触发后台事件,从而引起页面其他部分数据发生改变。 当时记得好像TreeView前面的复选框的可以引发选中项
需要在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;
AddSourceTable(e.Node);
}
}
/// <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);
}
}
}

本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读