- PR -

GridViewにTemplateFieldを追加

投稿者投稿内容
てぃと
会議室デビュー日: 2007/02/22
投稿数: 7
投稿日時: 2007-02-22 15:46
質問です。よろしくお願いします。

VB.NET2005で開発しています。Webです。
GridViewにコードからTemplateFieldを追加し
テキストボックスを追加したいと考えています。

あらかじめデザイナで配置したりもしたのですが、テキストボックスのIDを
自分で振りたいため、コードで追加できればと考えています。
詳しい方がいましたら、よろしくお願いします。


[ メッセージ編集済み 編集者: てぃと 編集日時 2007-02-22 15:46 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-02-22 16:56
方法 : ASP.NET Web サーバー コントロールのテンプレートを動的に作成する

InstantiateInでコントロールを追加する際にIDを付けてあげてはどうでしょうか。
あ、でも結局はコントロールツリーに従ったIDになっちゃったような・・・。
てぃと
会議室デビュー日: 2007/02/22
投稿数: 7
投稿日時: 2007-02-23 01:00
かめたろさん
返信ありがとうございます。

Repeaterコントロールを使用するのでしょうか?
試行錯誤しているものの、どうにもこうにもうまくいきません。
MSDNを見ていると、Repeater1.HeaderTemplate = New ・・・となっていますが、
そもそも何故いきなりRepeater1と来ているのかが不明です。

申し訳ありませんが、この辺りの解説をお願いできないでしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-02-23 01:13
引用:
Repeaterコントロールを使用するのでしょうか?
試行錯誤しているものの、どうにもこうにもうまくいきません。
MSDNを見ていると、Repeater1.HeaderTemplate = New ・・・となっていますが、
そもそも何故いきなりRepeater1と来ているのかが不明です。

よく読みましたか?たとえば
「テンプレートを使用するすべてのコントロール (DataList、Repeater、GridView、
FormView、および DetailsView) に関して、テンプレートをコードで作成できます。」
と書いてありますよね。GridViewを使いたいならRepeaterじゃなくてGridViewを使えば
いいわけです。

そもそもなぜ自分でIDを振りたいんですか?
てぃと
会議室デビュー日: 2007/02/22
投稿数: 7
投稿日時: 2007-02-23 02:34
べるさん、返答ありがとうございます。

さっそく、実験してみます。

IDを振りたい理由ですが、どの項目に入力がされたか判定したかったので
自分で振りたいと思いました。イメージとしては、以下のような感じです。

行番号  詳細
 1   □ (001 田中)
 2   □ (005 佐藤)
 3   □ (011 近藤)

□はテキストボックスとなります。
()はラベルです。

ここで、例えば田中さんのテキストボックスに入力があった場合、登録処理を
行いたいのですが、入力値は誰のテキストボックスかわからないため
テキストボックスに001のコードを付与して番号を持っておこう、と考えていました。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-02-23 03:31
引用:
IDを振りたい理由ですが、どの項目に入力がされたか判定したかったので
自分で振りたいと思いました。イメージとしては、以下のような感じです。

GridViewでしたら、例えばですけど
GridView1.Rows[2] とかで行がとれますんで あとは
あらかじめデザイナで配置したときのIDでFindControlでコントロールが取れると思います。

[追記]
ぁ、ごめんなさい。任意のIDを振りたいわけですね。
私だったらRowDataBoundイベントあたりで振るかなぁ。結局IDは
GridView1_ctl06_001 みたいになっちゃいますがRowsで回してFindControlすれば取得はできますし。

[ メッセージ編集済み 編集者: べる 編集日時 2007-02-23 03:40 ]
てぃと
会議室デビュー日: 2007/02/22
投稿数: 7
投稿日時: 2007-02-23 04:24
引用:

[追記]
ぁ、ごめんなさい。任意のIDを振りたいわけですね。
私だったらRowDataBoundイベントあたりで振るかなぁ。結局IDは
GridView1_ctl06_001 みたいになっちゃいますがRowsで回してFindControlすれば取得はできますし。



べるさん、何度もありがとうございます。
RowDataBoundイベントを調べてみたところ、良さそうな感じがします。
しかし、どうやってデザイナで配置したTextBoxを取得するかで詰まりました。。。
行を取得したときの状態がどうなっているのか、まだ理解できていないため
そこから調べてみます。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-02-23 14:49
引用:
べるさん、何度もありがとうございます。
RowDataBoundイベントを調べてみたところ、良さそうな感じがします。
しかし、どうやってデザイナで配置したTextBoxを取得するかで詰まりました。。。
行を取得したときの状態がどうなっているのか、まだ理解できていないため
そこから調べてみます。

RowDataBoundイベントハンドラの2番目の引数GridViewRowEventArgsがeだとすると
e.Rowでバインドされる行(GridViewRow)が取れるのでe.Row.FindControl("TextBox1")と
すればデザイナで配置した"TextBox1"が取れると思います。注意が必要なのはこのイベントは
ヘッダ等の分も発生するのでe.Row.RowTypeがDataControlRowType.DataRowかどうかをみて
判断する必要があります。

ただ、どうせ行が取れるんならhidden等にIDを埋め込んでもいいし、GridView+DataSource
使ってるならDataSourceのUpdateQuery等をいじればコーディングの必要すらないかもしれません。

スキルアップ/キャリアアップ(JOB@IT)