0

以下を実装するにはどうすればよいですか: グリッドビューの上部にチェックボックスを配置したいと思います。チェックボックスをオンにすると、グリッドビューからすべての非表示の行が表示されますが、オフにすると、再表示された行のみが表示されます。

上部に1つのチェックボックスのみが必要です(グリッドビューのヘッダーではありません)。いくつかの例が見つかりましたが、すべて列としてチェックボックスがあり、ヘッダーにも追加されました。

これを行う最良の方法は何ですか?

前もって感謝します。

4

1 に答える 1

2

これは、サーバー上で行う 1 つの方法です。

Gridview と Checkbox を次のように定義します。

<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 を使用してクライアントで非表示にすることにより、大幅に最適化できます。

于 2012-05-11T19:09:00.753 に答える