VS2005 TreeView 的 CheckBox 被点击时的引发页面回发事件

本文参照于:
VS2005 TreeView的checkBox的父子节点级联状态
非常感谢原作者
--------
解决原有TreeView 的 CheckBox 被点击时不能引发服务器端事件
实现当TreeView中父节点的CheckBox的点选状态改变时
回发服务器端
触发TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)事件
从而通过代码来控制子节点的CheckBox的点选状态 一同改变

主要步骤及代码示例如下:
1.TreeView绑定onclick事件
  通过本事件 引发回发
2.在TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)事件
  编写相关代码 控制子节点的CheckBox点选状态
-------------------- HTML 页面部分 -----------------------

 1<html>
 2<head runat="server">
 3    <title>VS2005 TreeView CheckBox</title>
 4    <script type="text/javascript">
 5    // 点击复选框时触发事件
 6    function postBackByObject()
 7    {
 8        var o = window.event.srcElement;
 9        if (o.tagName == "INPUT" && o.type == "checkbox")
10        {
11           __doPostBack("","");
12        }
 
13    }

14
</script> 
15</head>
16<body>
17    <form id="form1" runat="server">
18    <div>
19        <asp:TreeView ID="TreeView1" runat="server" OnTreeNodeCheckChanged="TreeView1_TreeNodeCheckChanged">
20            <SelectedNodeStyle BackColor="SlateGray" />          
21        </asp:TreeView>    
22    </div>
23    </form>
24</body>
25</html>


--------------------- cs页面代码 --------------------

 1protected void Page_Load(object sender, EventArgs e)
 2    {
 3        if (!IsPostBack)
 4        {
 5            //构建TreeView
 6            TreeNode Node00 = new TreeNode("00""00");
 7
 8            TreeNode Node01 = new TreeNode("01""01");
 9            TreeNode Node0101 = new TreeNode("0101""0101");
10            TreeNode Node0102 = new TreeNode("0102""0102");
11            TreeNode Node02 = new TreeNode("02""02");
12
13            Node01.ChildNodes.Add(Node0101);
14            Node01.ChildNodes.Add(Node0102);
15
16            Node00.ChildNodes.Add(Node01);
17            Node00.ChildNodes.Add(Node02);
18
19            TreeView1.Nodes.Add(Node00);
20
21            TreeView1.ShowCheckBoxes = TreeNodeTypes.All;//显示CheckBox
22            
23            TreeView1.ExpandDepth = 0;
24
25        }

26        //绑定事件
27        TreeView1.Attributes.Add("onclick""postBackByObject()");
28
29    }

30
31    //
32    protected void TreeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
33    {
34        SetChildChecked(e.Node);
35    }

36
37    //
38    private void SetChildChecked(TreeNode parentNode)
39    {
40        foreach (TreeNode node in parentNode.ChildNodes)
41        {
42            node.Checked = parentNode.Checked;
43
44            if (node.ChildNodes.Count > 0)
45            {
46                SetChildChecked(node);
47            }

48        }

49    }

50
51
0
0
(请您对文章做出评价)
« 上一篇:C#中常用到的JS
» 下一篇:[转]FreeTextBox使用详解

posted on 2007-01-05 14:38 freeliver54 阅读(4004) 评论(29)  编辑 收藏 网摘 所属分类: VS技術實踐

评论

#1楼 2007-02-02 16:39 calmni[未注册用户]

//绑定事件
TreeView1.Attributes.Add("onclick", "postBackByObject()");


这句错了,TreeView1就没有onclick事件。应该把TreeView1放在一个table中,用table调用postBackByObject()。另外,这种方法存在刷新问题,无法解决。
  回复  引用    

#2楼[楼主] 2007-02-02 19:06 freeliver54      

哦 你说的“另外,这种方法存在刷新问题,无法解决”
是指的什么 ?
另外 这个onclick事件 在我这里测试时是可以通过的
如果你想使用放在table中的方法 那就不知道其可行性了
  回复  引用  查看    

#3楼 2007-02-08 11:02 calmni[未注册用户]

啊?我的TreeView中就没有Onclick事件啊。我说的“另外,这种方法存在刷新问题,无法解决” 是指每次选中复选框的时候都会刷新。关于这个问题有时间的话咱们可以探讨一下,向你请教一下。QQ:109751752,注明TreeView探讨。谢谢你。
  回复  引用    

#4楼[楼主] 2007-02-08 21:00 freeliver54      

好啊 为了触发事件 少不了是要回发的
所以 如果为了不刷新
可以采用ajax相关技术
也可以用另种思路变相实现
具体可如下文所述
另种思路:图片转换 变通模拟实现VS2005下TreeView的ChcekBox点击 
  回复  引用  查看    

#5楼 2007-03-28 09:26 diandian[未注册用户]

不可行   回复  引用    

#6楼 2007-03-28 09:27 点点[未注册用户]

不可行啊
你通过了?
吹吧?
  回复  引用    

#7楼[楼主] 2007-03-28 13:06 freeliver54      

@点点
好啊
可能是环境 或者代码什么地方有出入吧
不过 在我这边当时是可以的
当然 你说你的不可以 那肯定也就是不可以了
希望你静下心 再好好思考下 理下头绪
或许 你再尝试下 就成功了
  回复  引用  查看    

#8楼 2007-04-21 13:36 xiangdn1[未注册用户]

TreeView1.Attributes.Add("onclick", "postBackByObject()");

这个没有问题
我测试过了

感谢LZ
  回复  引用    

#9楼[楼主] 2007-09-04 09:30 freeliver54      

用前台处理CheckBox的选中等 这样就不刷新了 参考于
http://www.cnblogs.com/freeliver54/archive/2007/09/04/881024.html
  回复  引用  查看    

#10楼[楼主] 2007-09-04 09:49 freeliver54      

VS2005 中 TreeView 去掉 链接
设置tNode.NavigateUrl = "http://#";
  回复  引用  查看    

#11楼 2007-10-26 13:51 dddd[未注册用户]

TreeView1.Attributes.Add("onclick", "postBackByObject()");
可以,我的也行,
就是不知道 不刷新时,父,子结点联动怎么做
  回复  引用    

#12楼[楼主] 2007-10-26 14:07 freeliver54      

@dddd
你好
可以参看

关于treeview中的checkbox的全选问题
http://www.cnblogs.com/freeliver54/archive/2007/09/04/881024.html
  回复  引用  查看    

#13楼 2008-04-25 13:10 Yu Biao[未注册用户]

可以用阿 还不错 谢谢了!   回复  引用    

#14楼 2009-08-07 11:26 fdsfasdf[未注册用户]

dsf   回复  引用    

导航

统计

公告

每一天都有新的开始
每一天都是新的开始
愿我们
善始善终 持之以恒
不管前方 是希望还是迷茫
我们都只有一个信念
让我们的爱  伴我们终生

搜索

 

随笔分类

随笔档案

techLINKS

友情链接

积分与排名

最新评论

阅读排行榜

评论排行榜

60天内阅读排行