none
GridViewコントロール内のHtmlInputCheckBox変更イベントについて RRS feed

  • 質問


  • いつもありがとうございます。

    GridViewコントロールでHtmlInputCheckBoxコントロールの変更時の値取得をしたいのですが、うまく取得できません。

    asp:CheckBoxコントロールですと、AutoPostBack="true" OnCheckedChangedイベントにより、変更時の値取得が可能なのですが、

    HtmlInputCheckBoxコントロールでAutoPostBack="true"及びonchangeやonserverchangeを記述してもイベント自体が発生しないのですが、

    どのようにすれば取得することができますでしょうか?

    asp:CheckBoxを使わず、HtmlInputCheckBoxを使っている理由は見た目上、チェックボックスではなく、

    ボタンのON/OFFのようなUIにしたかった為です。

    また、各チェックボックスをonする度に価格を計算していくようなものを作りたいので、各コントロール毎にイベントを発生させたいと考えております。

     <asp:TemplateField HeaderText="テスト列" HeaderStyle-CssClass="success">
     <ItemTemplate>
      <div data-toggle='buttons' id='menu' runat="server">
        <label class='btn btn-default btns'>
        <input type='checkbox' id="chk_1" runat="server" value="1" onserverchange="CheckBox2_CheckedChanged1" />牛乳</label>    
        <label class='btn btn-default btns'>
        <input type='checkbox' id="chk_2" runat="server" />パン</label>
        <label class='btn btn-default btns'>
        <input type='checkbox' id="chk_3" runat="server" />おかし</label>
      </div>
     </ItemTemplate>
    </asp:TemplateField>
    

    宜しくお願い致します。

    ----------------------------------------------------------------

    開発環境

    Windows10 Pro、

    Vsiaul Studio Community 2015(ASP.net C#)、

    ASP.NET開発サーバ、Framework4.5
    MySQL Server 5.6、MySQL Connector Net 6.6.9
    -------------------------------------------------------------------

    2015年11月13日 1:45

回答

  • 【追伸2】

    上のレスで紹介した GetPostBackEventReference, RaisePostBackEvent メソッド を使う方法より、隠しボタン(Button の CssClass に display: none; を設定)を追加して、checkbox がクリックされたらクライアントスクリプトを使ってその隠しボタンをクリックしてポストバックをかける方が簡単かもしれません。具体的な例は以下の記事を見てください。

    GirdView 内の隠しボタンでポストバック
    http://surferonwww.info/BlogEngine/post/2014/03/26/postback-by-clicking-hiddenbutton-in-gridview.aspx

    ただし、前にも書きましたが、上記のようなことを考える前に「ボタンのON/OFFのようなUI」というところだけが問題ならそこの解決方法を考えて、CheckBox サーバーコントロールを使ったほうが早いかもしれません。

    • 編集済み SurferOnWww 2015年11月14日 3:21 リンク張り直し
    • 回答としてマーク hys73 2015年11月14日 10:32
    2015年11月14日 3:10

すべての返信

  • > asp:CheckBoxを使わず、HtmlInputCheckBoxを使っている理由は見た目上、チェックボックスではなく、
    > ボタンのON/OFFのようなUIにしたかった為です。

    そこのところ(特に「ボタンのON/OFFのようなUI」というところ)をもっと詳しく説明していただけませんか?


    【追伸】

    クライアントのイベントでポストバックするには GetPostBackEventReference メソッド と RaisePostBackEvent メソッド を使うという方法があります(詳しくは以下の記事を見てください)。

    __doPostBack を使ってはいけません
    http://surferonwww.info/BlogEngine/post/2012/04/21/How-to-use-GetPostBackEventReference-and-RaisePostBackEvent-methods.aspx

    しかし、それを考える前に「ボタンのON/OFFのようなUI」というところだけが問題ならそこの解決方法を考えた方が早いかもしれないと思って聞いています。

    • 編集済み SurferOnWww 2015年11月13日 13:50 追伸追加
    2015年11月13日 10:54
  • 【追伸2】

    上のレスで紹介した GetPostBackEventReference, RaisePostBackEvent メソッド を使う方法より、隠しボタン(Button の CssClass に display: none; を設定)を追加して、checkbox がクリックされたらクライアントスクリプトを使ってその隠しボタンをクリックしてポストバックをかける方が簡単かもしれません。具体的な例は以下の記事を見てください。

    GirdView 内の隠しボタンでポストバック
    http://surferonwww.info/BlogEngine/post/2014/03/26/postback-by-clicking-hiddenbutton-in-gridview.aspx

    ただし、前にも書きましたが、上記のようなことを考える前に「ボタンのON/OFFのようなUI」というところだけが問題ならそこの解決方法を考えて、CheckBox サーバーコントロールを使ったほうが早いかもしれません。

    • 編集済み SurferOnWww 2015年11月14日 3:21 リンク張り直し
    • 回答としてマーク hys73 2015年11月14日 10:32
    2015年11月14日 3:10