2013年11月13日水曜日

ASP.NET C# GridView 列を非表示にしてその値を参照する方法

ASP.NET C# GridViewを使っているときにつまった点。

IDみたいな列は表示したくなかったので、非表示にしたら、値が取得できませんでした。
どうやら、データバインドされる前に非表示にするため、値が入っていないようです。

Visible="false"っていつ使うんだー!!><

●失敗したソース
<asp:BoundField HeaderText="ID" DataField="id" Visible="false"/>

非表示にしつつ、値を取得するには、
・データをバインドさせる
・その後に非表示にする
という手順を実施します。

データバインドは何もしなくて、通常のままです。
その後に「OnRowCreated」や「OnRowDataBound」でイベントを拾い、一行づつ非表示にします。

「OnRowCreated」「OnRowDataBound」の違いは、ポストバック時に実行されるかされないかです。
「OnRowCreated」は実行されます。
「OnRowDataBound」は実行されません。
記述方法は同じですので、ここでは「OnRowDataBound」を例にします。

・aspxファイル
<asp:GridView ID="GridViewList" runat="server" BackColor="White"
    EmptyDataText="データがありません。"
    AutoGenerateColumns="False" ForeColor="Black"
    ShowHeaderWhenEmpty="True" Width="900px"
    OnRowDataBound="GridViewList_RowDataBound">
    <Columns>
        <asp:BoundField HeaderText="ID" DataField="id" />
        <asp:BoundField HeaderText="名前" DataField="name" />
        <asp:BoundField HeaderText="郵便番号" DataField="postal_code" />
        <asp:BoundField HeaderText="住所" DataField="address" />
        <asp:BoundField HeaderText="電話番号" DataField="phone_number" />
    </Columns>
</asp:GridView>

OnRowDataBound="GridViewList_RowDataBound"を記述します。

「"OnRowDataBound="・・・"」の部分はcsファイルで使用します。

・csファイル
protected void GridViewList_RowDataBound(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[0].Visible = false;
}

「GridViewList_RowDataBound」はapsxファイルに記述したOnRowDataBound名です。

例では、「ID」列を非表示にしています。

1 件のコメント:

  1. バインド→非表示 の部分は初心者にはおおいに役に立ちました。

    返信削除