TRepeter

与えられたデータによる繰り返しのあるテンプレートのコンテンツ表示。
お次は、データベースのフォームとして必須のTRepeaterコントロールです。この備忘録は、データベースとのやり取りができるために最短の習得を行いたいと思って順序だてています。入力フォーマットであるテキストとボタン、表示の繰り返しをつかさどるTRepeaterにめどが立てば、後は、付随的に必要なものを付け加えていくのが良いと思っています。
TRepeater displays its content repeatedly based on the data fetched from DataSource. The repeated contents in TRepeater are called items which are controls accessible through Items property. When dataBind() is invoked, TRepeater creates an item for each row of data and binds the data row to the item. Optionally, a repeater can have a header, a footer and/or separators between items.
TRepeaterはDataSourceから取り出されたデータに基づいた繰り返しある内容を表示します。 TRepeaterにおける繰り返しされる内容は、Itemsとよばれ、Itemsプロパティを通してアクセス可能となるコントロールです。 dataBind()が作動するときに、TRepeaterはデータの各列のためにアイテムを作成し、データ列とアイテムを結合します。 オプションで、リピーターはアイテムの間にヘッダー、フッター、および/またはセパレータを持つことができます。
The layout of the repeated contents are specified by inline templates. In particular, repeater items, header, footer, etc. are being instantiated with the corresponding templates when data is being bound to the repeater.
繰り返しのある内容のレイアウトはインラインテンプレートによって指定されます。 特に、データがリピーターと結合している時には、リピーターアイテム、ヘッダー、フッターなどは対応するテンプレートによってインスタンス化されています。
Since v3.1.0, the layout can also be specified by renderers. A renderer is a control class that can be instantiated as repeater items, header, etc. A renderer can thus be viewed as an external template (in fact, it can also be non-templated controls). A renderer can be any control class. By using item renderers, one can avoid writing long and messy templates. Since a renderer is a class, it also helps reusing templates that previously might be embedded within other templates. If implemented with one of the following interfaces, a renderer will be initialized with additional properties relevant to the repeater items:
v3.1.0以降、レイアウトはrendererによっても特定することができます。 renderer とは、リピーターアイテム、ヘッダーなどとしてインスタンス化されるコントロールクラスです。 rendererは、従って、外部のテンプレート(実のところ、それはまたnon-templatedコントロールでも可です。)とみなされることができます。rendererはどのようなコントロールクラスででもかまいません。アイテムrendererを使うことによって、人は、長く、乱雑なテンプレートを書くのを避けることができます。 アイテムrendererを使うことは、また、rendererがクラスであるため、テンプレートの再利用を他のテンプレートの中で埋め込まれるかもしれないテンプレートを再利用することを助けます。 以下のインタフェースの1つがインプレメントされた場合、renderer は、リピーターアイテムに連動した追加的なプロパティを持つことになります。:
IDataRenderer - the Data property will be set as the row of the data bound to the repeater item. Many PRADO controls implement this interface, such as TLabel, TTextBox, etc.
IDataRenderer - このrendererのDataプロパティはリピーターアイテムと結合したデータの列として、値代入されます。多くのPRADOコントロール(TLabel、TTextBox等)は、このインタフェースをインプレメントしています。
IItemDataRenderer - the ItemIndex property will be set as the zero-based index of the item in the repeater item collection, and the ItemType property as the item's type (such as TListItemType::Item). As a convenient base class, TRepeaterItemRenderer implements IDataItemRenderer and can have an associated template because it extends from TTemplateControl.
IItemDataRenderer - このrendererのItemIndexプロパティは、リピーターアイテムコレクションにおけるアイテムとアイテムのタイプ(TListItemType::Itemなどの)としてのItemTypeプロパティのゼロベースインデックスと取り決められます。便利なベースクラスとして、TRepeaterItemRendererはIDataItemRendererをインプレメントし、それがTTemplateControlから拡張するので、関連したテンプレートを持つことができます。
The following properties are used to specify different types of template and renderer for a repeater. If an item type is defined with both a template and a renderer, the latter takes precedence.
以下のプロパティは、リピーターのためにさまざまなタイプのテンプレートとrendererを指定するように使われます。 アイテムタイプがテンプレートとrendererの両方によって定義される場合には、renderer が優先します。
  • ItemTemplate, ItemRenderer - for each repeated row of data.
  • ItemTemplate、 ItemRenderer - 繰り返しのあるデータ列に使用します。
  • AlternatingItemTemplate, AlternatingItemRenderer: for each alternating row of data. If not set, ItemTemplate or ItemRenderer will be used instead, respectively.
  • AlternatingItemTemplate、 AlternatingItemRenderer: 交互に起こるデータ列に使用します。 設定されていない場合には、ItemTemplateまたはItemRendererが各々代わりに適用されます。
  • HeaderTemplate, HeaderRenderer - for the repeater header.
  • HeaderTemplate、 HeaderRenderer - リピーターヘッダーに使用します。
  • FooterTemplate, FooterRenderer - for the repeater footer.
  • FooterTemplate、 FooterRenderer - リピーターフッターに使用します。
  • SeparatorTemplate, SeparatorRenderer - for content to be displayed between items.
  • SeparatorTemplate、 SeparatorRenderer - アイテムとアイテムの間で表示される内容に使用します。
  • EmptyTemplate, EmptyRenderer - used when data bound to the repeater is empty.
  • EmptyTemplate、 EmptyRenderer - リピーターと結合したデータが空の時に使われます。
To populate data into the repeater items, set DataSource to a valid data object, such as array, TList, TMap, or a database table, and then call dataBind() for the repeater. That is,
リピーターアイテムへデータを実装するために、DataSourceをarray,TList、TMap、またはデータベーステーブルなどの定型化されたデータオブジェクトに設定してください。それから、リピーターのためにdataBind()を呼び出してください。 すなわち
class MyPage extends TPage {
 public function onLoad($param){
  parent::onLoad($param);
   if(!$this->IsPostBack){
    $this->Repeater->DataSource=$data;
    $this->Repeater->dataBind();
  }
 }
}
When dataBind() is called, TRepeater undergoes the following lifecycles for each row of data:
dataBind()が呼ばれる時に、TRepeaterはデータの各列のために以下のlifecyclesをたどります。
  1. create item based on templates or renderers
  2. set the row of data to the item
  3. raise an OnItemCreated event
  4. add the item as a child control
  5. call dataBind() of the item
  6. raise an OnItemDataBound event
  1. テンプレートまたはレンダラーに基づいたアイテムを作成します。
  2. データの列をアイテムに設定します。
  3. OnItemCreatedされたイベントが発生します。
  4. 子コントロールとしてアイテムを追加します。
  5. アイテムのdataBind()関数を実行します。
  6. OnItemDataBoundイベントが発生します。
Normally, you only need to bind the data to repeater when the page containing the repeater is initially requested. When the page is post back, the repeater will restore automatically all its contents, including items, header, footer and separators. However, the data row associated with each item will not be recovered and thus become null.
通常、リピーターを含んでいるページが最初要求される時には、開発者はデータをリピーターと結合する必要があるだけです。 ページがポストバックされる場合には、リピーターはアイテム、ヘッダー、フッター、およびセパレータを含むすべてのその内容を自動的に復元します。 しかし、各アイテムと関連したデータ列は、回復されず、そのため、NULL値となります。
To access the repeater item data in postbacks, use one of the following ways:
ポストバックの際に、リピーターアイテムデータにアクセスするためには、以下の方法の1つを使ってください。
Use DataKeys to obtain the data key associated with the specified repeater item and use the key to fetch the corresponding data from some persistent storage such as DB.
指定されたリピーターアイテムと関連したデータキーを取得するために、DataKeys(プロパティ)を使い、DBなどのいくらかの持続的なストレージから対応するデータを取り出すために、そのキーを使ってください。
Save the whole dataset in viewstate, which will restore the dataset automatically upon postback. Be aware though, if the size of your dataset is big, your page size will become big. Some complex data may also have serializing problem if saved in viewstate.
データセット全体をviewstateに保存してください(それはポストバックが生じたときに自動的にデータセットを回復します)。 しかしながら、覚えておく必要があることがあります。データセットのサイズが大きくなると、そのページサイズは大きくなってしまいます。viewstate保存を行った場合には、さらに、複合データの連携についての問題が生じます。
TRepeater raises an OnItemCommand event whenever a button control within some repeater item raises a OnCommand event. Therefore, you can handle all sorts of OnCommand event in a central place by writing an event handler for OnItemCommand.
リピーターアイテムの中のボタンコントロールがOnCommandイベントを発生する時はいつでも、TRepeaterはOnItemCommandイベントを発生させます。 従って、OnItemCommandへのイベントハンドラを書くことによって、中心的な場所ですべての種類のOnCommandイベントを処理することができます。