
はじめまして、宜しくお願いします。
ASP.netのC#で開発を行っています。
チェックボックスリストのチェックボックスをチェックした際に、
SelectedIndexChangedイベントが発生しサーバ側で受け取れる
はずだと思っているのですが、全くポストバックされていないようです。
プロパティの「AutoPostBack」はTrueにしています。
ほかに条件はありますでしょうか?
ご存知の方がいらっしゃいましたら、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
もしかして、先ほど、
http://okwave.jp/qa4974802.html
で質問したやり方で、動的に選択項目を生成しているからイベントが発生しないとか?いや、それはないかなぁ。AutoPostBackもTrueみたいですし。
一応、イベント設定方法のやり方は2種類あるのでどちらかお好きな方でおためしください。
方法1:
CheckBoxList を定義している個所に
「OnSelectedIndexChanged="イベント処理用メソッド名"」
を記述する
例:
<asp:CheckBoxList
ID="CheckBoxList1"
runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
</asp:CheckBoxList>
方法2:
Page_Init や Page_Load などのイベントで、
CheckBoxList1.SelectedIndexChanged += new EventHandler(イベント処理用メソッド名);
を記述する
例:
protected void Page_Init(object sender, EventArgs e)
{
CheckBoxList1.SelectedIndexChanged += new EventHandler(CheckBoxList1_SelectedIndexChanged);
}
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
// 選択された時の処理を書く
if (CheckBoxList1.SelectedIndex > -1)
{
Label1.Text = CheckBoxList1.SelectedValue;
}
else
{
Label1.Text = string.Empty;
}
}
また、わからなければご連絡ください。
ご回答ありがとうございます!
まず、今までやっていたのは方法2の方法でした。
しかし、CheckBoxList1.SelectedIndexChanged += new EventHandler(CheckBoxList1_SelectedIndexChanged);
の部分はまったく記述していませんでした。
ただチェックボックスリストのコントロールをダブルクリックしてジャンプしたCheckBoxList1_SelectedIndexChangedの中に処理を記述しただけでできると思っていました。
よって方法2を参考に
CheckBoxList1.SelectedIndexChanged += new EventHandler(CheckBoxList1_SelectedIndexChanged);
を追記してみたところ動作は変わらず。
ブレークポイントを張ってみても通りません。
次に方法1のロジックをHTMLのコードに追記してみました。
が、チェックを付けてもイベントが発生しません。
しかし今度は、「チェックをつけた後に何かほかのボタンを押したら、その時にボタンクリックイベントの直前にSelectedIndexChangedイベントが発生している」模様です。
ひょっとしてこの動作が「SelectedIndexChangedイベントが発生している」状態なんでしょうか?
私はAutoPostBackをTrueにすれば、チェックを入れた瞬間にポストバックが行われると思っていたのですが・・・いかがでしょうか?
長々と書いてしまい申し訳ありません。
宜しくお願い致します。
No.4
- 回答日時:
>Userが金額を入力できるスプレッドがあり、Userが金額を修正した瞬間に合計を集計してスプレッド外のテキストボックスに即座に反映するようにしたいと思っているのですが可能でしょうか?
スプレッドのイベントの取り方などをサイトで調べてもあまり情報が無いようで・・・。
>良いURLでもありましたらご教授いただきたいと存じます。
この件は、新規質問で別途スレッドをあげて頂けると助かります。
即答できますが、当初の質問に対する問題は解決したので、このスレッドを締め切った後に、上記質問を新規で質問して頂けると有難いです。
わかることであればお答えしますので、宜しくお願いします。
No.3
- 回答日時:
>しかし今度は、「チェックをつけた後に何かほかのボタンを押したら、その時にボタンクリックイベントの直前にSelectedIndexChangedイベントが発生している」模様です。
もしかして、IsPostBack で条件判定している中に
SelectedIndexChangedイベントを設定したり、AutoPostBackを
Trueにさせるようなことしてませんか?
ひとまず下記のようなコードに書きなおしてみてください。
--------------------------------------------------------------
*.aspx ファイル
--------------------------------------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:CheckBoxList
ID="CheckBoxList1"
runat="server" />
<asp:Label ID="Label1" runat="server">
</asp:Label>
</form>
</body>
</html>
--------------------------------------------------------------
*.aspx.cs ファイル
--------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
// CheckBoxList1のイベントを追加する
CheckBoxList1.AutoPostBack = true; // ポストバックを有効
CheckBoxList1.EnableViewState = true; // ViewStateを有効
CheckBoxList1.SelectedIndexChanged += new EventHandler(CheckBoxList1_SelectedIndexChanged);
}
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
// 選択された時の処理を書く
if (CheckBoxList1.SelectedIndex > -1)
{
string value = string.Empty;
foreach (ListItem item in CheckBoxList1.Items)
{
if (!item.Selected)
{
continue;
}
if (!string.IsNullOrEmpty(value))
{
value += ",";
}
value += item.Value;
}
Label1.Text = value;
}
else
{
Label1.Text = string.Empty;
}
}
protected void Page_Load(object sender, EventArgs e)
{
// PostBackではなく初期ロードの時
if (!IsPostBack)
{
// チェックボックスリストの項目を表示する
List<ListItem> items = new List<ListItem>();
items.Add(new ListItem("項目1", "1"));
items.Add(new ListItem("項目2", "2"));
items.Add(new ListItem("項目3", "3"));
CheckBoxList1.Items.AddRange(items.ToArray());
}
}
}
もし、上記でも動かなければ、一度、リビルドしてみてください。
イベント設定したのに、イベントが動かないというのは、
イベントを設定したロジックを通っていない以外にはありえませんので
よく、ソースコードをご確認ください。
>私はAutoPostBackをTrueにすれば、チェックを入れた瞬間にポストバックが行われると思っていたのですが・・・いかがでしょうか?
その認識で正しいですよ。間違ってないです。
もし、これでも問題解決できなければ、作ったソースコードを見せてください。どうぞ宜しくお願いします。
こんなに丁寧にご回答していただいて、本当に有難うございます!
いただいたソースコードにて正常動作を確認しました。
そして、今まで動かなかった原因が判明しました。
「コントロールのプロパティで"AutoPostBack"をTrueにしているのに、HTMLのコードでみるとTrueになっていない」
という状況でした。
このHTMLに手書きでAutoPostBack=Trueを加えるとうまく行きました。
何故こんなことになったのかは全くわかりませんが・・・??
とりあえずkero-mioさんのソースコードを参考に、デザイナからではなくコードからCheckBoxList1.AutoPostBack = true; とするようにし
正常動作するようになりました!
なんだかデザイナのボタンの名称とHTMLのコード上での名称が
合わないこともあったりしたので、この辺はけっこう怪しむ必要が
ある感じなのでしょうかね?
丁寧にアドバイスありがとうございました!助かりました!
ちなみに、もうひとつ別件で質問があるのですが・・・(調子に乗ってすみませんw kero-mio様が詳しそうなもので。)
Userが金額を入力できるスプレッドがあり、Userが金額を修正した瞬間に合計を集計してスプレッド外のテキストボックスに即座に反映するようにしたいと思っているのですが可能でしょうか?
スプレッドのイベントの取り方などをサイトで調べてもあまり情報が無いようで・・・。
良いURLでもありましたらご教授いただきたいと存じます。
No.1
- 回答日時:
当方のWinXP SP3 + VS2005 SP1 + IIS の環境では
綺麗にポストバックしますよ
データバインディングでCheckBoxの項目を生成するのではなく
Itemsコレクションに追加してテストしております
質問の現象の発生する最小の手順も明記したほうがよいかと思います
開発環境や実行環境の明示もしましょう
ご回答ありがとうございます。
そーですか~、ポストバックしするんですね~。
私の環境はVisualStudio2008のC#で、IISは使ってません。
(そもそもIISが何か全くわかっていないのです。すみません勉強します。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Excel(エクセル) excelvbaのenableeventsについて 3 2022/08/30 11:20
- その他(Microsoft Office) EXCELでバーコードを作成すると白くなってコードが見えません 1 2022/04/04 14:24
- レシピ・食事 腸管癒着の診断、食事について教えて下さい。 食物繊維と腸内ガスを発生させる食物を控えるように指示を受 2 2023/04/19 18:03
- 写真・ビデオ iphoneからPCへ写真をインポート、保存先がわかりません。 2 2022/09/29 02:06
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) ListView1の条件のやり方 3 2022/06/18 22:43
このQ&Aを見た人はこんなQ&Aも見ています
-
AutoPostBackにしているが、うまくイベントが走らない
Microsoft ASP
-
ASP .NETでファイル選択ダイアログ
Microsoft ASP
-
PageLoadの後にJavascript実行したい
Microsoft ASP
-
-
4
【C#】Page_Loadさせない方法について
その他(プログラミング・Web制作)
-
5
グリッドビューでのチェックボックス押下時イベント
Visual Basic(VBA)
-
6
TextChangeイベントが発生しない
JavaScript
-
7
IEからEdgeへの移行に伴うIMEの状態(ime-mode)
HTML・CSS
-
8
画面のリフレッシュを意図的に行いたい
Microsoft ASP
-
9
ASP.NET(VB)VBソースからJavascriptの関数を呼ぶには
Microsoft ASP
-
10
Handlesについて
Visual Basic(VBA)
-
11
【ASP.NET】マスターページに配置されたボタンのイベントを拾いたい
Microsoft ASP
-
12
PL/SQL PLS-00103エラーについて
Oracle
-
13
GridviewとDataGridviewの違い
Microsoft ASP
-
14
ASP.Net 条件により自身を閉じるには
Microsoft ASP
-
15
PreRenderイベントの実装方法について
Microsoft ASP
-
16
会社の共有フォルダのIPアドレスを表示する方法
Windows 7
-
17
ASP.Net ラベルの内容をすぐに更新したい
Microsoft ASP
-
18
ポストバック(__doPostback)へ割り込み
Microsoft ASP
-
19
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SJISで、全角文字Aの文字コード...
-
スイッチが二台あり、別々のア...
-
Windowsで複数のファイルを同じ...
-
VBAでPDFを作成する際、同じ名...
-
エクセルに張り付けた写真のフ...
-
phpのファイルがブラウザで開か...
-
ASP.NetでWebアプリ開発の経験...
-
Windows10にデュアルブートでXP...
-
高校1年生情報の問題について。
-
キヤノン アソビカメラ iNSPiC ...
-
VBAでPDF作成をしたあと、指定...
-
【VB.NET】Excelの最終行までの...
-
SPO2測定
-
エクセルのマクロについて教え...
-
インドe-Visa 承認書のApplicat...
-
SPIの非言語の割合と比が難しく...
-
SPIの対策は参考書でやるべきか?
-
LEDで電光掲示板に「A B C D E...
-
One Driveへのアクセス
-
LINE APIからasp.net の web サ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASP.netで、CheckBoxListのSele...
-
aspxでIFみたいなことがしたい
-
c#側で ラジオボタンのチェック...
-
javascriptでlabelの値取得
-
aspx画面のINPUTボタンにファン...
-
ASP.NETでTimerコントロールを...
-
クリックしたボタンのIDの取得
-
textboxの二次元配列で質問
-
複数チェックボックスの判定に...
-
ASP.net Ajaxが動作しませんな...
-
ページごとに有効な変数
-
FormView から別画面でカレンダ...
-
ASP.Net DataBound時Style変2
-
ASP.NETで質問です。
-
HTML内の値を取得し、別の箇所...
-
aspxのページにjQueryのloadメ...
-
httpsのページがIE 7で表示でき...
-
FormViewのEditItemTemplateに...
-
<ASP>にTextBoxの...
-
<asp>タグの属性情報が取得でき...
おすすめ情報