zoukankan      html  css  js  c++  java
  • Asp.Net选择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;
                ..........         //添加或移除项

            }
         }
        /// <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);
                }
            }
        } 

  • 相关阅读:
    python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)
    axis2开发webservice之编写Axis2模块(Module)
    Android中的动画具体解释系列【2】——飞舞的蝴蝶
    湘潭邀请赛——Alice and Bob
    ZOJ 2859 二维线段树
    jsp导出身份证到excel时候格式不正确
    Android 自己定义View须要重写ondraw()等方法
    聚合类新闻client产品功能点详情分析
    vi下对齐代码的操作
    最新研发的基于Java的高速开发平台
  • 原文地址:https://www.cnblogs.com/ranlin/p/2129874.html
Copyright © 2011-2022 走看看