zoukankan      html  css  js  c++  java
  • 第二篇Gridview 导出excel

    ASP.NET 2.0使用TreeView控件时发现带有CheckBox控件的TreeNode对象(Treeview节点),选择CheckBox无法回发页面。在MSDN中对于TreeView, TreeNodeCheckChanged事件有一段备注:“当TreeView控件的复选框的两次向服务器发送之间要更改状态时,会引发TreeNodeCheckChanged事件。这使您可以提供一个这样的事件处理方法,即每次发生此事件时执行一个自定义例程(如更新数据库或显示的内容)。尽管TreeNodeCheckChanged事件在回发时激发,但更改复选框不会导致回发。”说明框架本身并不提供一个CheckBoX回发的机制。
          尽管点击CheckBox不会引起回发(PostBack),这样做能够做到checkbox的自动回发。
          但在构建树的时候,是没有办法在TreeNode上定义事件,所有我们把这个事件加在TreeView上。
     
    TreeView1.Attributes.Add("onclick", "postBackByObject()"); //注册客户端事件
     

     1 <script type="text/javascript">
     2 function postBackByObject()
     3 {
     4       var o = window.event.srcElement;
     5       //判断激发的对象是否为checkbox,如果是则激发__doPostBack("","");
     6       //因为前台生成的checkbox是"<input type='checkbox'./> "
     7       //所以判断如下:
     8       if(o.tagName == "INPUT" && o.type == "checkbox")
     9       {
    10            __doPostBack("","");    //注意:__doPostBack中为两个下划线组成"_"
    11       }
    12 }
    13 </script>
     
          在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack("","")这个函数。
     第一个参数是你希望提交到服务器的控件的ID号,第二个参数为事件参数。
          __doPostBack()函数不是每次后台编译都生成,拉或者出一个TreeView或者DataGrid它就会有。如果没有,我们也可以在后台添加它。
          __doPostBack()的原型如下:
       

     1 <script type="text/javascript">
     2 <!--
     3 var theForm = document.forms['form1'];
     4 if (!theForm) {
     5     theForm = document.form1;
     6 }
     7 function __doPostBack(eventTarget, eventArgument) {
     8     if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
     9         theForm.__EVENTTARGET.value = eventTarget;
    10         theForm.__EVENTARGUMENT.value = eventArgument;
    11         theForm.submit();
    12     }
    13 }
    14 // -->
    15 </script>
     
          其它控件也可以调用这个事件。比如:TextBox1.Attributes["onclick"] = "__doPostBack(Button1,")",那它不仅可以返回服务器处理,还能调用其它控件的特有函数。
          后台CS代码如下:
         

     1 #region 级联父子节点的复选框状态
     2
     3     protected void TreeView_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
     4     {
     5         SetChildChecked(e.Node);
     6         //判断是否根节点
     7         if (e.Node.Parent != null)
     8         {
     9             SetParentChecked(e.Node);
    10         }
    11     }
    12
    13     /// <summary>
    14     /// 根据父节点状态设置子节点的状态
    15     /// </summary>
    16     /// <param name="parentNode"></param>
    17     private void SetChildChecked(TreeNode parentNode)
    18     {
    19         foreach (TreeNode node in parentNode.ChildNodes)
    20         {
    21             node.Checked = parentNode.Checked;
    22             if (node.ChildNodes.Count > 0)
    23             {
    24                 SetChildChecked(node);
    25             }
    26         }
    27     }
    28
    29     private void SetParentChecked(TreeNode childNode)
    30     {
    31         TreeNode parentNode = childNode.Parent;
    32         if (!parentNode.Checked && childNode.Checked)
    33         {
    34             int ichecks = 0;
    35             foreach (TreeNode node in parentNode.ChildNodes)
    36             {
    37                 if (node.Checked)
    38                 {
    39                     ichecks++;
    40                 }
    41             }
    42             if (ichecks == parentNode.ChildNodes.Count)
    43             {
    44                 parentNode.Checked = true;
    45                 if (parentNode.Parent != null)
    46                 {
    47                     SetParentChecked(parentNode);
    48                 }
    49             }
    50         }
    51         else if (parentNode.Checked && !childNode.Checked)
    52         {
    53             parentNode.Checked = false;
    54         }
    55     }
    56
    57     #endregion

    如果本文引用了你的文章而未注明,请及时联系我。
  • 相关阅读:
    Leetcode: Palindrome Permutation
    Leetcode: Ugly Number
    Leetcode: Ugly Number II
    Leetcode: Single Number III
    Leetcode: 3Sum Smaller
    Leetcode: Factor Combinations
    Leetcode: Different Ways to Add Parentheses
    Leetcode: Add Digits
    GigE IP地址配置
    Ubuntu 关闭触摸板
  • 原文地址:https://www.cnblogs.com/sunxi/p/2571628.html
Copyright © 2011-2022 走看看