環境は、Visual Web Developer 2008 Express Editon with C# です。
データベースは、Oracle 10g Express Edition です。
触り始めて、1週間程度ですので、お手やらかに。
次のようなコードで、Oracleから取得した値をテーブルに表示しています。ここでreaderは、System.Data.OracleClient.OracleDataReaderラスのオブジェクト、Menuは、System.Web.UI.WebControls.Tableクラスのオブジェクトです。
while (reader.Read())
{
object[] values = new object[3];
int i = reader.GetOracleValues(values);
TableRow r = new TableRow();
TableCell delcom = new TableCell();
Button delButton = new Button();
delButton.Click += new EventHandler(delButton_Click);
delButton.Text = "削除";
delcom.Controls.Add(delButton);
r.Cells.Add(delcom);
for (int j = 0; j < 3; j++)
{
TableCell cell = new TableCell();
cell.Text = values[j].ToString();
r.Cells.Add(cell);
}
Menu.Rows.Add(r);
}
このコードは、メソッドにして、Page_Loadおよび、delButton_Clickの両メソッドから呼び出しています。
ここで、各行に貼り付けた「削除」ボタンを押すと、1回目では削除されず、2回目で削除されるという現象が起きています。
デバッガで追うと、1回目はdelButton_Clickメソッドが呼ばれず、2回目では呼ばれています。
1回目の表示では、設定したイベントが
色々、調べてみましたが、ちょっとお手上げです。
どのようにすれば、毎回この設定したイベントが有効になるかお知恵を拝借できないでしょうか?
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
当方 VS2005なのですが 動的に作成したボタンイベントも1回目でハンドラへ来ますよ
当方で実験したコードは以下のような感じです
データベースを使わずに 無条件で10個のボタンを作成します
PageのViewStateを使って表示/非表示を切り替えます
protected void Page_Load(object sender, EventArgs e)
{
for (int n = 0; n < 10; n++)
{
TableRow r = new TableRow();
TableCell c = new TableCell();
Button btn;
string ss = String.Format("del{0,2:d}", n);
btn = new Button();
btn.Text = ss;
btn.Font.Name = Table1.Font.Name;
btn.Font.Size = Table1.Font.Size;
btn.Click += new EventHandler(myClick);
if (IsPostBack && !ViewState.IsItemDirty(ss))
{
// ポストバック時にViewStateにアイテムが無いなら非表示
btn.Visible = false;
c.Visible = false;
r.Visible = false;
}
c.Controls.Add(btn);
r.Controls.Add(c);
Table1.Controls.Add(r);
if (!IsPostBack)
{
// 初回のみViewStateに登録
ViewState[ss] = ss;
}
}
}
protected void myClick(object sender, EventArgs e)
{
Button btn = (Button)sender;
// ViewStateからアイテムを削除
ViewState.Remove(btn.Text);
// コントロールを削除
Table1.Controls.Remove(btn.Parent.Parent);
}
といった具合です
PageLoad時に ViewStateを見てコントロールの作成自体をスキップするコードにすると
Clickイベントの引数senderがおかしくなる現象が起きました
たとえば 3番目の『del 2』を削除した後『del 3』を削除しようとした場合『del 4』を削除してしまいます
ここでもう一度『del 3』をクリックすると『del 3』が削除される
といった現象です
GridViewを使ったほうが簡単に実現出来そうですよ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
VBA:Openステートメントで開い...
-
喧嘩をしてLINE削除され、 また...
-
告白してフラれた相手の連絡先...
-
女友達にLINEしたら、既読スル...
-
Facebookに私が2つのってます...
-
バッチファイルを使用したsql@p...
-
もう関わりたくない人がいたらL...
-
教えてgooでは、自分の質問が削...
-
すべてやりきった、大満足を意...
-
これのどこが削除対象になるの...
-
教えて!goo の運営は、質問の...
-
Googleフォトでバックアップを...
-
指定した文字があった場合、そ...
-
VBA IF文でORを使ったとき後ろ...
-
マクロで特定の行まで削除する...
-
「リクエストの有効期限が切れ...
-
削除されるの前提で質問するこ...
-
ウェブページへのアクセス不可 ...
-
インスタアカウント、前の携帯...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
VBA:Openステートメントで開い...
-
指定した文字があった場合、そ...
-
バッチファイルを使用したsql@p...
-
もう関わりたくない人がいたらL...
-
【エクセル】セル内の右側のみ...
-
アクセスにおいて間違って削除...
-
Windows11に残されたWindows10...
-
喧嘩をしてLINE削除され、 また...
-
告白してフラれた相手の連絡先...
-
VBA IF文でORを使ったとき後ろ...
-
Facebookに私が2つのってます...
-
エクセルVBAで行削除時にエラー...
-
エクセルで住所の混在する「丁...
-
女友達にLINEしたら、既読スル...
-
今日の日付が過ぎたらその行を...
-
マクロで特定の行まで削除する...
-
すべてやりきった、大満足を意...
-
Adobe AcrobatのPDFのページ削除
-
エクセルで下の空白行を削除したい
おすすめ情報