2016-09-06 60 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來調整視圖。