
はじめまして。
現在ASP.net でweb画面を作成していますが、動的に作成したコントロールの削除が不規則な動きをしており困り果ててこちらにきました。よろしくお願いします。
配置してあるテーブルに行だけを動的に追加しており
その行には、テキストボックスと削除ボタンが含まれています。
不規則な動きというのは、以下になります。
1行目の削除ボタンを押す→1行目が消える
1行目になった削除ボタンを押す→変化なし
1行目の削除ボタンを押す→末尾の行が消える
という状態です。デバッグで確認すると、
Removeで消しているコントロールIDは確かに1行目のものなのに、
画面が開くとそれが残っているという現象です。
そしてなぜ末尾が途中から消されていくのかは分かりません。
もしかして思うのは、毎回Loadで動的に生成しているため、
削除ボタンが押されたときもLoad一度生成したものをイベントハンドラで削除しようとしていておかしくなるのかなという気もしますが、
毎回生成しないとコントロール自体が消えてしまい、Loadでなくイベントハンドラで生成するようにすると、今度は入力値が消えてしまいます。
ソースは以下になります。(一部抜粋)
とても困っています。宜しくお願いします。
'テーブルの枠だけデザイナで作成しておく
<table id="tblDynamic" runat="server" enableviewstate="false">
</table>
'ロード
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
’配置してあるテーブルに行を動的に追加する
For rowCnt As Integer = 1 To 10
tblFormat.Rows.Add(retCreateRow(rowCnt))
Next
End Sub
’テーブルの行(コントロールを含む)を作成して返す関数
Function retCreateRow(rowCnt As Integer) As HtmlTableRow
Dim tr As New HtmlTableRow
Dim cel1 As New HtmlTableCell
Dim cel2 As New HtmlTableCell
Dim txt As New TextBox
Dim btn As New ImageButton
txt .ID = "txt " & "_" & rowCnt
cel1.Controls.Add(txt)
tr.Cells.Add(cel1)
btn.ID = "btn" & "_" & rowCnt
btn.text="行削除"
AddHandler btn.Click, New System.Web.UI.ImageClickEventHandler(AddressOf btnDelete_btnInsert)
cel2.Controls.Add(btn)
tr.Cells.Add(cel2)
Return tr
End Function
'行削除イベントハンドラ
Private Sub btnDelete(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim ControlIdx = Split(CType(sender, ImageButton).ID, "_")(1)
'この削除ボタンがある行Indexを取得
For HitIdx As Integer = 1 To tblFormat.Rows.Count
If Not IsNothing(tblFormat.Rows(HitIdx).FindControl(CType(sender, ImageButton).ID)) Then
'あった!この行を削除する
Me.tblFormat.Rows.RemoveAt(HitIdx)
Exit For
End If
Next
End Sub
No.1ベストアンサー
- 回答日時:
どの行を生成するのか記憶しておく変数を準備して これをSessionに登録してみてはいかがでしょう
dim bRow(10) as Boolean
' Page_Loadイベント
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
if IsPostBack then
'何かのアクションで呼び出されたのなら bRowをSessionから復元
bRow = Session("bRow")
else
' Sessionを新規生成
Session("bRow") = bRow
end if
for n as integer = 1 to 10
if bRow(n) = false then
' 削除済みフラグが設定されていなければ生成
tblFormat.Rows.Add(retCreateRow(n))
end if
next
End Sub
' 行削除ハンドラ
Private Sub btnDelete(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim btn as ImageButton = CType(sender, ImageButton)
Dim ControlIdx = Split(btn.ID, "_")(1)
' Sessionから bRowを取得
bRow =Session("bRow")
if bRow(ControlIdx) = false then
bRow(ControlIdx) = true
dim row as HtmlTableRow = btn.Parent.Parent
tblFormat.rows.Remove(row)
' Sessionの更新
Session("bRow") = bRow
end if
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
指定した文字があった場合、そ...
-
何故ニクァイ(媚中で無いアル...
-
(Access)複数条件の重複デー...
-
ワードで画像に埋め込まれたハ...
-
エクセルVBAで行削除時にエラー...
-
バッチファイルを使用したsql@p...
-
opensslを削除したい
-
5ちゃんねる、オープン2ちゃん...
-
インスタグラムのギャラリーの...
-
エクセルで住所の混在する「丁...
-
エクセルの右クリックで行削除...
-
【エクセル】セル内の右側のみ...
-
outlook迷惑メールフォルダーに...
-
スマッシュブラザーズXのお名前...
-
YouTubeの初期音量が最大になり...
-
MSNの検索履歴の消去方法につい...
-
コントロールパネルの変更と削...
-
ここで質問した投稿で ベストア...
-
iphoneに登録した顔文字を消し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
2度と連絡とらないとお互い納得...
-
Youtubeの書き起こしの機能につ...
-
告白してフラれた相手の連絡先...
-
指定した文字があった場合、そ...
-
VBA:Openステートメントで開い...
-
何故ニクァイ(媚中で無いアル...
-
VBA 編集可能な範囲の指定につ...
-
バッチファイルを使用したsql@p...
-
mp3の埋め込み画像の削除ができ...
-
もう関わりたくない人がいたらL...
-
Windows11に残されたWindows10...
-
アクセスにおいて間違って削除...
-
喧嘩をしてLINE削除され、 また...
-
ウェブページへのアクセス不可 ...
-
エクセルVBAで行削除時にエラー...
-
エクセルで下の空白行を削除したい
-
【エクセル】セル内の右側のみ...
-
エクセルで住所の混在する「丁...
-
ORA-14452について
おすすめ情報