2012-05-11 42 views
0

如何實現以下功能:我想在GridView頂部有一個複選框。當複選框被選中時,應該顯示gridview中的所有隱藏行,但是何時未選中應該只顯示取消隱藏的行。一個用於控制gridview行的複選框

我只需要在頂部的一個複選框(不是在gridview的頭部),我發現了幾個例子,但所有的複選框作爲列,然後添加到標題以及。

這樣做的最好方法是什麼?

在此先感謝。

回答

2

這是做它在服務器上的一種方法:

我定義GridView和複選框如下:

<asp:CheckBox id="cbShowHidden" runat="server" Text="Show Hidden Rows" 
    Checked="true" oncheckedchanged="cbShowHidden_CheckedChanged" AutoPostBack="true" ></asp:CheckBox> 
<br /> 
<asp:GridView ID="gvTest" AutoGenerateColumns="false" runat="server" 
    ShowHeader="true" onrowdatabound="gvTest_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="id" HeaderText="id" /> 
     <asp:BoundField DataField="name" HeaderText="name" /> 
     <asp:BoundField DataField="family" HeaderText="family" /> 
     <asp:BoundField DataField="visibility" HeaderText="visibility" /> 
    </Columns> 
</asp:GridView> 

這是隱藏代碼:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      PopulateGrid(); 
     } 
    } 
    private void PopulateGrid() 
    { 
     gvTest.DataSource = Enumerable.Range(0, 3000).Select(i => new { id = i, name = 2 * i, family = "Unknown", visibility = i % 3 == 0 ? "Visible" : "Hidden" }); 
     gvTest.DataBind(); 
    } 
    protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     bool showHidden = cbShowHidden.Checked; 
     if (e.Row.RowType == DataControlRowType.DataRow) 
      e.Row.Visible = showHidden || string.Compare(e.Row.Cells[3].Text, "Visible") == 0; 
    } 
    protected void cbShowHidden_CheckedChanged(object sender, EventArgs e) 
    { 
     PopulateGrid(); 
    } 

這可以通過使用jQuery隱藏客戶端來進行優化。

+0

感謝您的回答,我也設法以類似的方式做到這一點。 – CPM