2016-09-06 67 views
0

我从复选框onclick事件调用showhide()函数,此showhide函数也隐藏Gridview页面,因为gridview分页器也形成<tr><td>和在我的代码我正在使用网格视图列的索引来隐藏。但对于我的要求,我只需要隐藏gridview列。有没有办法做到这一点?GridView列显示/隐藏导致gridview分页问题的复选框onclick

<asp:CheckBox ID="chkReceiveDt" runat="server" Checked="true" 
       OnClick="showhide(this,'ReceiveDt')" /> 

    <script type="text/javascript"> 

    function showhide(sender, ColumnText) { 
     var isChecked = $('#' + sender.id).is(":checked"); 
     var th = $("[id*=GridView1] th:contains(" + ColumnText + ")"); 
     th.css("display", isChecked ? "" : "none"); 
     $("[id*=GridView1] tr").each(function() { 
     $(this).find("td").eq(th.index()).css("display", isChecked ? "" : "none"); 
     }); 

    } 

    </script> 
+0

我能想到的唯一方法是将行'中的所有内容复制到一个虚拟表中。 – VDWWD

+0

@VDWWD Gridview pager动态发生,所以我无法控制它将tr元素复制到虚拟表。 –

回答

0

On复选框单击事件传递要隐藏/显示以下函数的GridView的列号。代码工作得很好,不会影响Gridview的分页。

<asp:CheckBox ID="chkReceiveDt" runat="server" Checked="true" 
        OnClick="showhideColumn(this,1)" /> 
    <script type="text/javascript"> 
    function showhideColumn(sender, col_num) 
     { 
      var isChecked = $('#' + sender.id).is(":checked"); 
     var grid = document.getElementById("<%=GridView1.ClientID %>"); 
     for (i = 1; i < grid.rows.length; i++) { 
      grid.rows[i].cells[col_num].style.display = isChecked ? "" : "none"; 
     } 
     } 
    </script> 
0

我今天遇到了这个问题,以及后面this作者教程。以为我也会分享我的简单修复方法来解决寻呼机问题。

由于寻呼机存储在THEAD和TFOOT,我们可以通过选择我们行时只需添加下面一行在GridView中选择行时,只是忽略那些:

.not('thead tr').not('tfoot tr'); 

所以

$("[id*=GridView1] tr").each(function() { 
     $(this).find("td").eq(th.index()).css("display", isChecked ? "" : "none"); 
     }); 

变为

$("[id*=GridView1] tr").not('thead tr').not('tfoot tr').each(function() { 
     $(this).find("td").eq(th.index()).css("display", isChecked ? "" : "none"); 
     }); 

并没有更多的分页问题。现在取决于GridView分页的方式,您可能会遇到问题,保持PostBacks的列可见性。为了解决这个问题,我保存并从隐藏字段中读取isChecked,并调用GridView I Register a Client Script BlockOnRowDataBound来调整视图。