2013年11月13日水曜日

ASP.NET C# GridView 内コントロールボタンのイベントを取得する方法

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 件のコメント:

コメントを投稿