QA@IT

ASP.NET C# Webコントロール[RadioButton]継承時のイベントについて

7794 PV

いつもお世話になっております。
現在、下記サイトを参考にしGridView内でグループ化できるRadioButtonを
作成しました。
http://blog.livedoor.jp/nal_6295/archives/9599507.html

このRadioButtonに対し、変更時のCheckChangedイベントを取得したいのですが、
うまくできません。
どのようにすれば良いのでしょうか?
ご教授お願いいたします。

回答

このRadioButtonに対し、変更時のCheckChangedイベントを取得したいのですが、
うまくできません。

参考にされているページのカスタムコントロールでは CheckedChanged イベントは発生しません。

以下のページに紹介されているものは OK です。LoadPostData メソッドをオーバーライドしているところがキモです。

データバインドコントロール内で使用できるカスタムラジオボタンの作成
http://codezine.jp/article/detail/840

カスタムコントロールを使わないで、普通の RadioButton を使って、JavaScript でチェックを入れなおす方法もあります。

GridView 内の RadioButton
http://surferonwww.info/BlogEngine/post/2013/08/30/radiobutton-in-girdview.aspx

上記は RadioButton そのものなので、もちろん CheckedChanged イベントは発生します。

編集 履歴 (1)

SurferOnWwwさん、いつもありがとうございます。
載せていただいた下側のリンクの様なjavascriptで試みたのですが、radiobutton選択時のポストバックで選択がクリアされてしまうので下記の様にOnCheckedChanged()内で選択箇所以外のチェックをクリアするようにしました。
aspx

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField HeaderText="選択">
            <ItemTemplate>
                <asp:RadioButton ID="RadioButton1" runat="server" AutoPostBack="True" OnCheckedChanged="RadioButton1_CheckedChanged" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

cs

protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
    RadioButton selectRb = (RadioButton)sender;
    GridViewRow selectRow = (GridViewRow)selectRb.Parent.Parent;
    foreach (GridViewRow gridRow in GridView1.Rows)
    {
        if (selectRow == gridRow) continue;
        RadioButton rb = (RadioButton)gridRow.FindControl("RadioButton1");
        rb.Checked = false;
    }
}
編集 履歴 (0)
  • AutoPostBack="True" は、どうしてもそれが必要というならやむを得ませんが、できれば使わないほうが良いと思うのですが・・・ -
  • そうなんですか!無知で申し訳ないのですが、AutoPostBack="True"はどういったところが良くないのでしょうか?クライアント側のプログラムに慣れていなくてどうしてもサーバー側で書こうとしてしまいます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。