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」列を非表示にしています。
バインド→非表示 の部分は初心者にはおおいに役に立ちました。
返信削除