- - PR -
Webコントロールのボタンを動的に配置
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-24 19:00
.NET初心者です。
|---------------------| |TextBox | Button(削除)| |---------------------| |TextBox | Button | |---------------------| |TextBox | Button | |---------------------| Button(追加) というような画面(テーブル)を表示し、TextBoxに入力が できる状態で、動的に行の追加、削除を行いたいと思います。 上記の例でいうと、4行目を入力したい場合は「追加」ボタン を用意しておいて、クリックすると4行目が現れる、といった 画面にしたいと思っています。テーブルにあるボタンを押すと その行が削除できるような仕様です。 画面のファイル中にコードを書いてループさせれば間単にでき るのですが、画面のファイルにコードを書きたくないので、 別ファイルにコードを書いて動的に作成(「追加」ボタンを押 すたびにPostBackさせる等)したいのですが、どのようにすれば 実現できるか分かりません。 良い方法は無いでしょうか。 私の理想としては、ページが表示された際のLoad用関数で テーブルを(デフォルトで5行表示、TextBoxは空白で)表示させ、 「追加」ボタンを押すとPostBackして一番下に1行追加される、 「削除」ボタンを押すと、押した行のレコードが削除される( こちらもPostBackで)です。 | ||||||||||||
|
投稿日時: 2004-12-25 02:29
ボタンクリックのイベントハンドラに
TextBox tb = new TextBox(); TableCell tc = new TableCell(); tc.Controls.Add(tb); TableRow tr = new TableRow(); tr.Cells.Add(tc); Table1.Rows.Add(tr); のようなことを書く。つまり、コントロールをセルに追加し、セルをROW(行)に追加し ROWをテーブルに追加する、です。削除の場合はRemoveやRemoveAtです。 検索すればサンプルがありそうですね。 ・・って、こんな回答を求めてるのではない??
[ メッセージ編集済み 編集者: べる 編集日時 2004-12-25 11:18 ] | ||||||||||||
|
投稿日時: 2004-12-25 11:30
DataGridじゃ駄目なんですよね?きっと・・・
となると、ボタンを押したときの処理はJavaScriptで自前で記述する事になると思います。消したいレコードを一意に識別できるようなIDをURLのパラメータにして呼び出せばよいでしょう。 | ||||||||||||
|
投稿日時: 2004-12-26 10:28
それか削除用のイベントハンドラを作り、全部のボタンのクリックイベントに登録し、
((Button)sender).ID かなんかで判別するとか。 個人的には、リンクにしちゃってURLのパラメータで渡す方が楽な気もします。 DataGridも、自分の用途にあってるかどうか調べてみるといいと思います。 もしやVS.netは使ってないのですか?コード自動生成がないとそれはそれで 結構めんどくさいですよね。勉強になっていいなぁとは思ってますが。 | ||||||||||||
|
投稿日時: 2004-12-26 13:05
DataGridで、空行を1つ追加して追加用にしています。「空行を追加する」ルーチンと、「空行なら削除する」ルーチンが必要ですが。
_________________ | ||||||||||||
|
投稿日時: 2004-12-27 09:48
回答ありがとうございます。
この場合は画面でタグを書いてる部分にコードを埋め込んで、単純にループしてテーブルの行を制御させてるだけです。ただ、そのコードを画面のファイルに書きたくないので外部ファイルでなんとかしようと思っています。 開発環境はWeb Matrixを使用しています。 回答いただいた方法を検討して作成しています。とりあえず、画面とは別ファイルでボタンとかテキストボックスを動的に配置することは出来たので、こんどはそのボタンにイベントで削除とかの処理ができるようにしてみます。やはりjavascriptでしょうか。 DataGridだと行の追加、削除が自動で出来るかなと思ったんですが、そうでもないんですね。 | ||||||||||||
|
投稿日時: 2004-12-27 18:15
的外れな回答をしていたらすみません。
Repeaterをつかったらどうでしょうか? これを使うと、簡単なループ処理が行なわれます。 削除ボタンのイベントは、 RepeterのItemComandイベントで取得し、 e.Item.ItemIndex()で選択行を特定。 あとは、FindControlで取得したい値を取得し DBへの削除処理。 その後、DBから値を再読み込みして、Repeterに値をDataBind 追加ボタンのイベントは 通常のボタンイベントで取得し、DBへの追加処理 その後、DBから値を再読み込みして、Repeterに値をDataBind これで、やりたい事はやれるかと・・・ | ||||||||||||
|
投稿日時: 2004-12-27 22:20
axさんはDBのことは直接言及されていませんが「ボタンを押すと、押した行の
レコードが削除される」といっているので、DBと連携してるのですよね。
ボックスを動的に配置することは出来た」とのことで、ひとまずはよかったです。
渡すか、という問題を考えてのことでしょう。
何行目のボタンを押したかなどが比較的容易にとれます。Repeaterも含め方法はいろいろ ありそうです。@ITのなか一通りよめば結構書いてありますしね。 Web Matrixは使ってないし、DataGridもあまり使わないので、 ちょっとおかしなことを言ってたらごめんなさい・・ [ メッセージ編集済み 編集者: べる 編集日時 2004-12-27 22:22 ] |