はじめまして。
現在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も見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
【お題】 ・急に朝起こしてきた母親に言われた一言とは?
-
ユーザーフォームで動的(Me.Controls.Add)に作成したコントロールの削除
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
VBA:Openステートメントで開い...
-
エクセルVBAで行削除時にエラー...
-
ヤフオクのホームに保存した検...
-
ワードで、URLがリンクになって...
-
YouTubeの初期音量が最大になり...
-
ウェブページへのアクセス不可 ...
-
秀丸で一行おきに行を削除する...
-
iPhoneのSafariについてです! ...
-
今日の日付が過ぎたらその行を...
-
Excel VBAマクロで実行時エラー...
-
ここ厳しくなりすぎてない?
-
回答がついてる普通の質問まで...
-
エクセルで住所の混在する「丁...
-
喧嘩をしてLINE削除され、 また...
-
メーリングリストから特定の人...
-
指定した文字があった場合、そ...
-
Windows11に残されたWindows10...
-
nProtectの削除について(PSO2削除)
-
告白してフラれた相手の連絡先...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Yahooフリマってどれくらい時間...
-
指定した文字があった場合、そ...
-
もう関わりたくない人がいたらL...
-
VBA:Openステートメントで開い...
-
喧嘩をしてLINE削除され、 また...
-
アクセスにおいて間違って削除...
-
【エクセル】セル内の右側のみ...
-
これのどこが削除対象になるの...
-
今日の日付が過ぎたらその行を...
-
DELETE文とTRUNCATE文の違いに...
-
すべてやりきった、大満足を意...
-
ダブルクォーテーションの削除...
-
VBA IF文でORを使ったとき後ろ...
-
告白してフラれた相手の連絡先...
-
バッチファイルを使用したsql@p...
-
エクセルVBAで行削除時にエラー...
-
(Access)複数条件の重複デー...
-
エクセルで住所の混在する「丁...
-
ウェブページへのアクセス不可 ...
-
女友達にLINEしたら、既読スル...
おすすめ情報