ASP.NET C# GridView 内コントロールボタンのイベントを取得する方法です。
調べると、
ボタンがひとつの場合 と ボタンが複数の場合 と、
方法が異なるように書かれていますが、どちらも同じ方法でいこうと思います。
ボタンがひとつの場合、「SelectedIndexChanged」メソッドで選択された行を取得するとありますが、
どちらも「RowCommand」メソッドでいいと思いました。
さっそくソースです。
・apsxファイル
<asp:GridView ID="GridViewList" runat="server" BackColor="White"
EmptyDataText="データがありません。"
AutoGenerateColumns="False" ForeColor="Black"
ShowHeaderWhenEmpty="True" Width="900px"
OnRowCommand="GridViewList_RowCommand">
<Columns>
<asp:ButtonField Text="編集" ButtonType="Button" CommandName="EditData" />
<asp:ButtonField Text="削除" ButtonType="Button" CommandName="DeleteData" />
<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>
OnRowCommand="GridViewList_RowCommand"を記述します。
「"OnRowCommand="・・・"」の部分はcsファイルで使用します。
ButtonField には「CommandName」を指定します。
「Cancel,Delete,Edit,Page,Select,Sort,Update」は予約済みのコマンド名なので、それ以外にします。
「CommandName="・・・"」の部分はcsファイルで使用します。
・csファイル
protected void GridViewList_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowIndex = Convert.ToInt16(e.CommandArgument);
GridView gridView = (GridView)e.CommandSource;
GridViewRow row = gridView.Rows[rowIndex];
string id = row.Cells[2].Text;
switch (e.CommandName)
{
case "EditData":
LabelMessage.Text = "EditDataボタンをクリック_" + id;
break;
case "DeleteData":
LabelMessage.Text = "DeleteDataボタンをクリック_" + id;
break;
}
}
「GridViewList_RowCommand」はapsxファイルに記述したOnRowCommand名です。
「e.CommandName」でボタンを区別します。
case "・・・"はapsxファイルに記述したCommandName名です。
「 id」は値の取得例です。
これが一番シンプルな方法かなあと思います。
0 件のコメント:
コメントを投稿