• 締切済み

ASP.NET 動的ボタンのイベント、ページ遷移

いつも拝見させてもらってます。 ASP.NETでWEBページを作成中ですが 思い通りの動作が出来ないので質問させてください。 環境:VS2005(VB使用)、.NET Framework 2.0、SQL Server 2005 ローカルにてデバッグ実行をしています。 実現したい動作↓ 1.ページロード時にてDB接続、データ抽出、テーブルを作成 2.テーブル作成時にてボタンを動的に作成 3.ボタンクリック時、別ページに遷移 1,2は実装したんですが3が遷移してくれません。 以前にも実装した事がある機能なので そのソースを元にして3を実装したのですがなぜか… Try - Catch してますので作成に関してはエラーはないようです。 下記にソースの抜粋を記述しますので ミスがある箇所をご指摘いただければと思います。 不足情報があれば言ってください、補足します。 'ページ構成 Form->Div->Table 'ページロード Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load  If IsPostBack = False Then   initTable()  End If End Sub 'テーブル描画 Private Sub initTable()  Dim trCell As TableCell  Dim trRow As TableRow  Dim objAddCmd As System.Web.UI.WebControls.Button  With Table1   For i as Integer = 0 To XXX(抽出データ件数 - 1)    'テーブル作成処理    ・・・    'ボタンを動的に作成    objAddCmd = New System.Web.UI.WebControls.Button    objAddCmd.ID = "btnTest" & i.ToString    objAddCmd.Text = "テスト"    objAddCmd.Height = 24    objAddCmd.width = 50    AddHandler objAddCmd.Click, AddressOf btnTest_Click    .Rows(i).Cells(0).Controls.Add(objAddCmd)   Next  End With End Sub '動的ボタン制御 Protected Sub btnTest_Click(Byval sender As Object, Byval e As System.EventArgs)  'ページ遷移処理 End Sub 上記がソースになります。 なお、btnTest_Click関数でブレイクポイントを設定してもブレイクしません。 それと、Page_Load関数のinitTableをIf文の中でも外でもページ遷移はしませんでした。 If文の中では動的ボタンクリック後、ページが真っ白、外では遷移せずそのまま。 よろしくお願いします。

みんなの回答

  • onos
  • ベストアンサー率81% (127/155)
回答No.1

動的に生成したボタンとイベントの関連づけはPostBack時も行わないと関連づけされなかった気が。。。 以前に実装したとき、ってPostBackかどうかでの切り分けやってます?

Rilakkuma_san
質問者

お礼

自己解決しました。 回答ありがとうございました。 原因としては 動的に作成したボタンのIDとしていた値に 「: (コロン)」が含まれていたためのようです。

Rilakkuma_san
質問者

補足

回答ありがとうございます。 返信が遅れてしまいすいません。 質問の文にはPageLoadイベント時にPostBack判定で initTable関数による動的ボタン配置をしていますが 現在、Page_Initイベント時にinitTable関数を実行させています。 上記の実装でも機能が実現出来ない状態です。 以前の実装のものはPostBack判定にかかわらず テーブル描画、ボタンの動的配置をしており機能が実現出来ています。

関連するQ&A

  • form2がボタンを押すと消えてしまう

    vb2010で、作成しています。form1から、form2を呼び出し、okボタンまたは、cancelボタンを押すと、無条件でform2が消えてしまいます。私がしたいのは、form2(パスワード入力ウィンドウ)でテキストボックスにパスワードを入力してokボタンを押して、それが正しい(1234)ときのみform2を消去することです。現在のところ、入力したパスワードが間違っていてもokボタンを押すと、form2は消えてしまいます。 form1側のコードとform2側のコードは以下です。お手数ですが御教示いただけると幸いです。 /////////Form1 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Form2() f.TextBox1.PasswordChar = "*"c '//入力文字をマスクする If f.ShowDialog(Me) = DialogResult.OK Then If f.TextBox1.Text = "1234" Then f.Dispose() End If End If End Sub End Class /////////Form2 Public Class Form2 Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.OK End Sub Private Sub btncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.Cancel End Sub End Class

  • VB2008EEラジオボタンにて、

    VB2008EEラジオボタンにて、 チェックされていない時、というのはif文で指定できるでしょうか? チェックボックスは、下記で出来ますが、ラジオボタンでは出来るでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "1" End If End Sub 複数のラジオボタンがあって1つ選んだ後に別のを選び直した後に、選ばれてないほうの値を変えたいです。 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub

  • データベース内の情報が削除できない

    DataGrid上にボタンを配置してDeleteCommandの実装を試みているのですが、上手くいきません。 ========================= Private Sub DataGrid1_DeleteCommand(ByVal _ source As Object, ByVal e As _ System.Web.UI.WebControls. _ DataGridCommandEventArgs) Handles _ DataGrid1.DeleteCommand Dim PAS As String Dim PIG As Label PIG = CType(e.Item.FindControl("Label1"), Label) If (Not PIG Is Nothing) Then PAS = PIG.Text Dim PAS2 As String = e.Item.Cells(2).Text Dim dr As DataSet1.認証Row dr = DataSet11.認証.Rows.Find("ID") dr.Delete() OleDbDataAdapter1.Update(DataSet11) DataGrid1.DataBind() End If End Sub ========================= これではできないのでしょうか? 教えてください。

  • イベント内で別イベントを呼ぶ方法

    早速質問させていただきます。 Form上にDataGridView(dgv)があります。 dgvのセルをマウスでダブルクリックした時に処理を入れております。 Private Sub dgv_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellDoubleClick   If e.RowIndex = -1 Then     Exit Sub   End If   '//処理 End Sub このdgv上でEnterキーを押した際に、ダブルクリックしたのと同じ処理を 行いたいのですが、このような場合、どのような実装をするのが一般的なのでしょうか? 例えば、下記の様にCall dgv_CellDoubleClick(sender, e)をするとEventArgsが合わないためエラーになってしまいます。 適切な方法をご教授お願い致します。 Private Sub dgv_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dgv.KeyDown   If e.KeyCode = Keys.Enter Then     Call dgv_CellDoubleClick(sender, e)   End If End Sub

  • Page_Load時にボタンクリックイベントを実行するには?

    ASP.NETでPage_Load時にボタンクリックイベントを実行するにはどのようにすればいいのでしょうか? 具体的には、HTTPクエリ文字列のresultが"1"の場合はbutton1_Clickイベントを実行したいのですが、やりかたが分かりません。 サンプルソースの★の部分に button1_Click(sender, System.Web.UI.ImageClickEventArgs.Empty) と入れたら、 「型 'System.EventArgs' のオブジェクトを型 'System.Web.UI.ImageClickEventArgs' にキャストできません。」 というエラーメッセージが表示されてしまいます。 ■■■■■■サンプルソース■■■■■■ Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load   'クエリー取得(数値チェック)   If Request.QueryString("result").ToString = "1" Then     '検索ボタン押下処理を表示する     ★button1_Clickイベントを実行したい。   End If End Sub '検索ボタン押下 Protected Sub button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles button1.Click '検索結果を表示する     : End Sub

  • VB2010において同様のイベントを設定する。

    現在、VisualBasic2010を用いてPanel1~Panel4をPanel5へ移動させて図形を作成させるコードを書いております。 今後Panel1~Panel4をPanel5だけでなく、Panel6,Panel7にも同様に移動させたいと考えておりますが、やりかたがわかりません。 画像はPanel5へ移動させたものです。同様に下に配置したPanel6へも移動させたいです。 わかる方がおられましたら、お力添えいただけると助かります。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Panel5.AllowDrop = True End Sub Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown, Panel2.MouseDown, Panel3.MouseDown, Panel4.MouseDown sender.DoDragDrop(sender, DragDropEffects.Move) End Sub Private Sub Panel5_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel5.DragDrop Dim srsPnl As Panel = e.Data.GetData(GetType(Panel)) Dim dstPnl As New Panel dstPnl.Size = srsPnl.Size dstPnl.Location = Panel5.PointToClient(CursorPosition) 'New Point(e.X, e.Y) dstPnl.BackColor = srsPnl.BackColor AddHandler dstPnl.MouseDown, AddressOf dstPnl_MouseDown AddHandler dstPnl.MouseMove, AddressOf dstPnl_MouseMove Panel5.Controls.Add(dstPnl) End Sub Private Sub Panel5_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel5.DragEnter If e.Data.GetDataPresent(GetType(Panel)) Then e.Effect = DragDropEffects.Move End If End Sub Private previousPos As Point Private Sub dstPnl_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown previousPos = CursorPosition() End Sub Private Sub dstPnl_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) If e.Button = Windows.Forms.MouseButtons.Left Then Dim nowPos As Point = CursorPosition() DirectCast(sender, Panel).Left += nowPos.X - previousPos.X DirectCast(sender, Panel).Top += nowPos.Y - previousPos.Y Console.WriteLine(nowPos.X & "-" & previousPos.X) previousPos = nowPos End If End Sub Function CursorPosition() As Point Return New Point(CInt(Cursor.Position.X / 10) * 10, CInt(Cursor.Position.Y / 10) * 10) End Function End Class これが現在書いているコードです。

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスだと、下記でチェックされていないもの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスでも同じような記述をしていまして、下記の記述でチェックされていないものの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub レベル低いといきなりラスボスは倒せないので、目先のミッションクリアが目的です。 応用は後々学んで行きます。 「ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか?」  

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスでも同じような記述をしていまして、下記の記述でチェックされていないものの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub レベル低いといきなりラスボスは倒せないので、目先のミッションクリアが目的です。 応用は後々学んで行きます。 「ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか?」

  • ボタンの検知

    すみません。初心者です。教えてください。 フォームにボタン1個、テキストボックス1個のプログラムです。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim chr As String Dim chr2 As String chr = "■" chr2 = Label1.Text Label1.Text = chr2 & chr End Sub このプログラムで ・ボタンを「押すたび」に"■"→"■■"→"■■■"と増えていきます。 これを ・ボタンを「押しままにすると」"■"→"■■"→"■■■"と増えていくようにするにはどうしたらよいでしょうか? 例えばタイマー使って100ms毎とかで"■"の数を増やしたいと思っていますが、「ボタンを押している」ということをどのように拾ったらいいか考えてもわかりません。 どなたかすみませんが教えてください。