Repeater コントロールの ItemTemplate 内でコントロールを使う方法

前回の記事で基本的なリピーター (Repeater) コントロールの使い方を説明しました。

データソースとバインドして、それを表示するというだけなら、前回の記事程度の内容で済みます。

今回は少しだけ発展させて、Repeater コントロールの ItemTemplate で TextBox 等のサーバー側コントロールを使う方法を紹介します。

ItemTemplate で TextBox を利用する方法

ItemTemplate 内で TextBox を使うのは簡単です。Text 属性にデータをバインドすれば OK です。この時、次のように Text='... のように、 引用符にして Eval で使われる二重引用符と重ならないようにすることだけ注意してください。

リピーターコントロール

この結果、次のように TextBox がデータ数分だけ出力されます。

リピーターコントロール

ID はどのように扱うか?

さて、簡単にデータが表示されることはわかりましたが、このデータにはどのようにアクセスしたらよいでしょうか?

ID は指定されていますが、リピーターコントロールだけに、コントロールは複数個作成されますので ID で一意に TextBox を指定することはできません。

この解決策は次のようになります。

ItemTemplate 内のコントロールに指定される ID は、繰り返し項目の1セット内での ID です。つまり、ItemTemplate (もしくは AlternatingItemTemplate) 内での ID (識別子) です。

ページ全体で一意になる識別子ではありません。

Repeater コントロールの「繰り返し項目」は、Repeater コントロールの Items 属性からアクセス可能です。 Repeater コントロールの Items 属性は RepeaterItem のコレクションです。そして、その名の通り1項目毎は RepeaterItem という型です。

RepeaterItem の FindControl で ID を指定すると、テンプレート内で定義したコントロールが取得できます。

例えば上の例では ItemTemplate 内の TextBox コントロールに textBox1 という ID を割り当てていますので、次のようにして TextBox を取得できます。

リピーターコントロール

尚、実際に出力される HTML では Repeater1_textBox1_n (n は 0, 1, 2, ...) のように、Repeater コントロールの ID、TextBox の ID と連番、という組み合わせで (ページ内で一意の) id が割り振られます。(マスターページを使っているときはもう少し複雑ですが)

ID については ASP.NET 4 から、採番方式が選択可能になりました。次の記事を参考にしてください。

ASP.NET が生成する HTML 要素の ID を制御するクライアント ID モード

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 ASP.NET 入門