关于TreeView控件CheckBox选中事件

 做一个带复选框的TreeView控件,功能要实现父节点的复选框被选择,其子节点全部被选择,去除了全部子节点的选择时,父节点也自动去除.我想用javascript在客户端实现.请问在treeview控件的节点上点击CheckBox将出发什么事件?
代码如:
<iewc:TreeView id="TreeView1" AutoPostBack="True" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 16px" runat="server">
<iewc:TreeNode CheckBox="True" Text="John Smith">
<iewc:TreeNode CheckBox="True" Text="Born: Jan. 3rd, 1885"></iewc:TreeNode>
<iewc:TreeNode CheckBox="True" Text="Died: Feb. 13, 1919"></iewc:TreeNode>
<iewc:TreeNode CheckBox="True" Text="Spouse">
<iewc:TreeNode CheckBox="True" Text="Marie Ellsworth">
<iewc:TreeNode CheckBox="True" Text="Born: Aug. 1, 1889"></iewc:TreeNode>
<iewc:TreeNode CheckBox="True" Text="Died: Unknown"></iewc:TreeNode>
</iewc:TreeNode>

 

/// <summary>
  ///    如果该节点是叶子节点,就检查该叶子节点的父节点是否被选中,如果没有将父结点设为选中状态。
  ///    如果该节点是父节点点,就检查该父节点点的父节点是否被选中,如果没有将父结点的父节点设为选中状态。
  ///    如果是取消该叶子节点,则检测该叶子节点的所有兄弟结点是否全部没有被选中。如果是就取消该节点的父结点的选中状态
  ///    如果点击的是父结点,则将该节点的所有字节点设置为该节点相同的状态
  /// </summary>
  private void checkAllChild(TreeNode node)
  {
   this.treeView1.AfterCheck -= new System.Windows.Forms.TreeViewEventHandler(treeView1_AfterCheck);
   TreeNode TempNode = null;
   TreeNode TempNode1 = null;
   bool  bNodeStatus = false;
   if(node.Nodes.Count == 0)      //该节点是叶子节点
   {
    bNodeStatus = node.Checked;
    if(bNodeStatus)        //如果该节点被选中则将该节点父节点设置成为选中状态
    {
     TempNode = node.Parent;    
     while(TempNode != null)     //将它的所有父节点设定为选中状态
     {
      TempNode.Checked = true;  
      TempNode = TempNode.Parent;
     }
    }
    else          //如果是取消对该节点的选中状态
    {
     TempNode1 = node;
     TempNode = node.Parent;
     while(TempNode != null)
     {
      if(this.CheckCurrentLevelStatus(TempNode1) == -1) //如果全部是未选中状态
      {
       TempNode1.Parent.Checked = false;    //取消该节点的父节点的选中状态
      }
      TempNode1 = TempNode;
      TempNode = TempNode.Parent;
     }
    }
   }
   else           //如果操作的不是叶子节点
   {
   
    for(int i=0;i<node.Nodes.Count;i++)   //将父节点的所有子节点设置成父节点相同的状态
    {
     node.Nodes[i].Checked = node.Checked;
     this.treeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(treeView1_AfterCheck);
     checkAllChild(node.Nodes[i]);
     this.treeView1.AfterCheck -= new System.Windows.Forms.TreeViewEventHandler(treeView1_AfterCheck);
    }
    if(node.Checked == false)     //如果是取消对非叶子节点的选中
    {
     TempNode1 = node;
     TempNode = node.Parent;
     while(TempNode != null)
     {
      if(this.CheckCurrentLevelStatus(TempNode1) == -1) //如果全部是未选中状态
      {
       TempNode1.Parent.Checked = false;    //取消该节点的父节点的选中状态
      }
      TempNode1 = TempNode;
      TempNode = TempNode.Parent;
     }
    }
   }
   this.treeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(treeView1_AfterCheck);
  }
  /// <summary>
  /// 函数功能: 检测与node同级的所有节点的状态
  ///    如果全部被选中返回   1
  ///    如果全部没有被选中返回 -1
  ///    其它情况返回    0
  /// </summary>
  private int CheckCurrentLevelStatus(TreeNode node)
  {
   int CheckedCount = 0;   //记录被选中的节点的数目
   int unCheckedCount = 0;   //记录未被选中的节点的数目
   TreeNode tempNode = null;
   tempNode = node.Parent.FirstNode;
   while(tempNode != null)
   {
    if(tempNode.Checked)  
    {
     CheckedCount++;
    }
    else
    {
     unCheckedCount++;
    }
    tempNode = tempNode.NextNode;
   }
   if((CheckedCount != 0) && (unCheckedCount != 0))
   {
    return 0;
   }
   else if(CheckedCount == 0)
   {
    return -1;
   }
   else
   {
    return 1;
   }
  }

  private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
  {
   this.checkAllChild(e.Node);
  }


 }
}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在WinForms中使用TreeView控件添加CheckBox的示例代码: 1. 在TreeView的节点中添加CheckBox,可以在节点的构造函数中添加以下代码: ```csharp public class MyTreeNode : TreeNode { public MyTreeNode(string text) : base(text) { this.CheckBoxes = true; // 启用CheckBox } } ``` 2. 在TreeView中添加节点时,可以使用自定义的MyTreeNode来代替TreeNode,以便启用CheckBox。 ```csharp MyTreeNode node1 = new MyTreeNode("Node 1"); MyTreeNode node2 = new MyTreeNode("Node 2"); MyTreeNode node3 = new MyTreeNode("Node 3"); treeView1.Nodes.Add(node1); treeView1.Nodes.Add(node2); treeView1.Nodes.Add(node3); node1.Nodes.Add(new MyTreeNode("Node 1-1")); node1.Nodes.Add(new MyTreeNode("Node 1-2")); node1.Nodes.Add(new MyTreeNode("Node 1-3")); node2.Nodes.Add(new MyTreeNode("Node 2-1")); node2.Nodes.Add(new MyTreeNode("Node 2-2")); node2.Nodes.Add(new MyTreeNode("Node 2-3")); node3.Nodes.Add(new MyTreeNode("Node 3-1")); node3.Nodes.Add(new MyTreeNode("Node 3-2")); node3.Nodes.Add(new MyTreeNode("Node 3-3")); ``` 3. 在使用CheckBox时,可以使用TreeNode的Checked属性来获取或设置节点的选中状态。 ```csharp private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { // 获取当前节点的选中状态 bool checkedState = e.Node.Checked; // 设置所有子节点的选中状态 foreach (TreeNode node in e.Node.Nodes) { node.Checked = checkedState; } // 设置所有父节点的选中状态 TreeNode parentNode = e.Node.Parent; while (parentNode != null) { bool allChecked = true; foreach (TreeNode node in parentNode.Nodes) { if (!node.Checked) { allChecked = false; break; } } parentNode.Checked = allChecked; parentNode = parentNode.Parent; } } ``` 通过上述步骤,即可在TreeView控件中添加CheckBox
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值