首页 新闻 会员 周边

asp.Net TreeView复选框父子节点联动,复选框时间触发不了

0
悬赏园豆:20 [已解决问题] 解决于 2015-12-24 17:03

 前台代码,TreeView

 1  <div class="dropdown">
 2                        <asp:TreeView ID="Tree_Knowledge" runat="server"  Height="263px" ShowCheckBoxes="All" ShowLines="True" Width="336px" ExpandDepth="0" OnTreeNodeCheckChanged="TreeNodeCheckChanged" ></asp:TreeView>
 3                     </div>
 4 
 5  <script  type="text/javascript">
 6         // 点击复选框时触发事件
 7         function postBackByObject() {
 8             var o = event.srcElement;
 9             if (o.tagName == "INPUT" && o.type == "checkbox") {
10                 __doPostBack("", "");
11             }
12 
13         }
14 
15 </script>

后台cs代码:

 protected void BinTree()
    {
        beanitem = bllItem.Get_Single(LessonID);
        dt1 = bllknowledge.selectbyCT(dt1, beanitem.techtask.beancoursetype.CourseTypeid);
        Tree_Knowledge.Nodes.Clear();
        Tree_Knowledge.Attributes.Add("onclick", "postBackByObject()");
        AddTree(0,null);
    }
    protected void AddTree(int ParentID, TreeNode PNode)
    {

        if (dt1.Rows.Count > 0)
        {
            DataView dv = new DataView(dt1);
            //过滤ParentID,得到当前的所有子节点 ParentID为父节点ID
            dv.RowFilter = "[parentid] = " + ParentID;
            //循环递归
            foreach (DataRowView Row in dv)
            {
                //声明节点
                TreeNode Node = new TreeNode();
                Node.SelectAction = TreeNodeSelectAction.None;             
                //开始递归
                if (PNode == null)
                {
                    //添加根节点
                    Node.Text = Row["name"].ToString();
                    Tree_Knowledge.Nodes.Add(Node);
                    AddTree(Int32.Parse(Row["id"].ToString()), Node);    //再次递归
                }
                else
                {
                    //添加当前节点的子节点
                    Node.Text = Row["name"].ToString();
                    PNode.ChildNodes.Add(Node);
                    AddTree(Int32.Parse(Row["id"].ToString()), Node);     //再次递归
                }
            }
        }
    }
    protected void TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
    {
        SetChildCheck(e.Node);
    }
    protected void SetChildCheck(TreeNode PNode)
    {
        foreach (TreeNode node in PNode.ChildNodes)
        {
            node.Checked = PNode.Checked;

            if (node.ChildNodes.Count > 0)
            {
                SetChildCheck(node);
            }
        }
    }

前台复选框为什么触发不了TreeNodeCheckChanged事件,这是.Net TreeView自带的属性还是动不了?谢谢!

码码码农的主页 码码码农 | 初学一级 | 园豆:90
提问于:2015-08-12 10:54
< >
分享
最佳答案
1

TreeNodeCheckChanged事件是在每一项前面的checkbox状态改变时才会触发的。

收获园豆:20
火悬崖 | 菜鸟二级 |园豆:434 | 2015-08-12 14:56

恩,对的,但问题是 我单击checkbox不触发,调试过单击之后根本不跳进TreeNodeCheckChanged函数。

码码码农 | 园豆:90 (初学一级) | 2015-08-12 17:00

@码码码农: 选中checkbox之后,再点击项看看,它不是通过checkbox来触发的,是判断checkbox的状态触发的。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-08-12 17:04

@火悬崖: 我试试,我把节点的单击触发关了,打算只用checkbox的,谢啦

码码码农 | 园豆:90 (初学一级) | 2015-08-12 17:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册