Class TDataList
TDataList class
TDataList represents a data bound and updatable list control.
Like TRepeater
, TDataList displays its content repeatedly based on
the data fetched from setDataSource DataSource. The repeated contents in
TDataList are called items, which are controls and can be accessed through
getItems Items. When TDataBoundControl::dataBind()
is invoked, TDataList creates an
item for each row of data and binds the data row to the item. Optionally, a
TDataList can have a header, a footer and/or separators between items.
TDataList differs from TRepeater
in that it supports tiling the items
in different manners and it maintains status of items to handle data update.
The layout of the repeated contents are specified by inline templates. TDataList 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 by renderers. A renderer is a control class that can be instantiated as datalist 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.
- If the class implements
IDataRenderer
, the Data
property will be set as the data row during databinding. Many PRADO controls
implement this interface, such as TLabel
, TTextBox
, etc.
- If the class implements
IItemDataRenderer
, the ItemIndex property will be set
as the zero-based index of the item in the datalist item collection, and the
ItemType property as the item's type (such as TListItemType::Item).
TDataListItemRenderer
may be used as the convenient base class which
already implements IDataItemRenderer.
The following properties are used to specify different types of template and renderer for a datalist:
- setItemTemplate ItemTemplate, setItemRenderer ItemRenderer:
for each repeated row of data
- setAlternatingItemTemplate AlternatingItemTemplate, setAlternatingItemRenderer AlternatingItemRenderer:
for each alternating row of data. If not set, setItemTemplate ItemTemplate or setItemRenderer ItemRenderer will be used instead.
- setHeaderTemplate HeaderTemplate, setHeaderRenderer HeaderRenderer:
for the datalist header.
- setFooterTemplate FooterTemplate, setFooterRenderer FooterRenderer:
for the datalist footer.
- setSeparatorTemplate SeparatorTemplate, setSeparatorRenderer SeparatorRenderer:
for content to be displayed between items.
- setEmptyTemplate EmptyTemplate, setEmptyRenderer EmptyRenderer:
used when data bound to the datalist is empty.
- setEditItemTemplate EditItemTemplate, setEditItemRenderer EditItemRenderer:
for the row being editted.
- setSelectedItemTemplate SelectedItemTemplate, setSelectedItemRenderer SelectedItemRenderer:
for the row being selected.
If a content type is defined with both a template and a renderer, the latter takes precedence.
When TDataBoundControl::dataBind()
is being called, TDataList undergoes the following
lifecycles for each row of data:
- create item based on templates or renderers
- set the row of data to the item
- raise onItemCreated OnItemCreated:
- add the item as a child control
- call dataBind() of the item
- raise onItemDataBound OnItemDataBound:
TDataList raises an onItemCommand OnItemCommand whenever a button control within some datalist 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 OnItemCommand.
An additional event is raised if the OnCommand event has one of the following command names:
- edit: user wants to edit an item. OnEditCommand event will be raised.
- update: user wants to save the change to an item. OnUpdateCommand event will be raised.
- select: user selects an item. OnSelectedIndexChanged event will be raised.
- delete: user deletes an item. OnDeleteCommand event will be raised.
- cancel: user cancels previously editting action. OnCancelCommand event will be raised.
TDataList provides a few properties to support tiling the items. The number of columns used to display the data items is specified via setRepeatColumns RepeatColumns property, while the setRepeatDirection RepeatDirection governs the order of the items being rendered. The layout of the data items in the list is specified via setRepeatLayout RepeatLayout, which can take one of the following values:
- Table (default): items are organized using HTML table and cells.
When using this layout, one can set setCellPadding CellPadding and setCellSpacing CellSpacing to adjust the cellpadding and cellpadding of the table, and setCaption Caption and setCaptionAlign CaptionAlign to add a table caption with the specified alignment.
- Flow: items are organized using HTML spans and breaks.
- Raw: TDataList does not generate any HTML tags to do the tiling.
Items in TDataList can be in one of the three status: normal browsing, being editted and being selected. To change the status of a particular item, set setSelectedItemIndex SelectedItemIndex or setEditItemIndex EditItemIndex. The former will change the indicated item to selected mode, which will cause the item to use setSelectedItemTemplate SelectedItemTemplate or setSelectedItemRenderer SelectedItemRenderer for presentation. The latter will change the indicated item to edit mode and to use corresponding template or renderer. Note, if an item is in edit mode, then selecting this item will have no effect.
Different styles may be applied to items in different status. The style application is performed in a hierarchical way: Style in higher hierarchy will inherit from styles in lower hierarchy. Starting from the lowest hierarchy, the item styles include
- item's own style
- getItemStyle ItemStyle
- getAlternatingItemStyle AlternatingItemStyle
- getSelectedItemStyle SelectedItemStyle
- getEditItemStyle EditItemStyle.
Therefore, if background color is set as red in getItemStyle ItemStyle, getEditItemStyle EditItemStyle will also have red background color unless it is set to a different value explicitly.
When a page containing a datalist is post back, the datalist 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 become null. To access the data, use one of the following ways:
- Use getDataKeys DataKeys to obtain the data key associated with
the specified datalist item and use the key to fetch the corresponding data from some persistent storage such as 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.
- TComponent
-
TApplicationComponent
-
TControl implements IRenderable, IBindable
-
TWebControl implements IStyleable
-
TDataBoundControl
-
TBaseDataList
-
TDataList implements INamingContainer, IRepeatInfoUser
Direct known subclasses
TActiveDataListCopyright: Copyright © 2005-2014 PradoSoft
License: http://www.pradosoft.com/license/
Author: Qiang Xue <qiang.xue@gmail.com>
Since: 3.0
Located at Web/UI/WebControls/TDataList.php
public
|
|
public
integer
|
|
public
string
|
|
public
|
|
public
string
|
|
public
|
|
public
string
|
|
public
|
|
public
string
|
|
public
|
#
setSelectedItemRenderer( string $value )
Sets the renderer class for the datalist item being selected. |
public
string
|
|
public
|
|
public
string
|
|
public
|
|
public
string
|
|
public
|
|
public
string
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
integer
|
|
public
|
#
setSelectedItemIndex( integer $value )
Selects an item by its index in getItems Items. Previously selected item will be un-selected. If the item to be selected is already in edit mode, it will remain in edit mode. If the index is less than 0, any existing selection will be cleared up. |
public
|
|
public
mixed
|
|
public
integer
|
|
public
|
#
setEditItemIndex( integer $value )
Edits an item by its index in getItems Items. Previously editting item will change to normal item state. If the index is less than 0, any existing edit item will be cleared up. |
public
|
|
public
boolean
|
|
public
|
|
public
boolean
|
|
public
|
|
protected
|
|
public
string
|
|
public
|
|
public
|
|
public
|
|
public
integer
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
boolean
|
#
bubbleEvent(
This method overrides parent's implementation to handle onItemCommand
OnItemCommand event which is bubbled from datalist items and their child
controls. If the event parameter is |
public
|
#
onItemCreated(
Raises OnItemCreated event. This method is invoked after a data list item is created and instantiated with template, but before added to the page hierarchy. The datalist item control responsible for the event can be determined from the event parameter. If you override this method, be sure to call parent's implementation so that event handlers have chance to respond to the event. |
public
|
#
onItemDataBound(
Raises OnItemDataBound event. This method is invoked right after an item is data bound. The datalist item control responsible for the event can be determined from the event parameter. If you override this method, be sure to call parent's implementation so that event handlers have chance to respond to the event. |
public
|
#
onItemCommand(
Raises OnItemCommand event. This method is invoked when a child control of the data list raises an OnCommand event. |
public
|
#
onEditCommand(
Raises OnEditCommand event. This method is invoked when a child control of the data list raises an OnCommand event and the command name is 'edit' (case-insensitive). |
public
|
#
onDeleteCommand(
Raises OnDeleteCommand event. This method is invoked when a child control of the data list raises an OnCommand event and the command name is 'delete' (case-insensitive). |
public
|
#
onUpdateCommand(
Raises OnUpdateCommand event. This method is invoked when a child control of the data list raises an OnCommand event and the command name is 'update' (case-insensitive). |
public
|
#
onCancelCommand(
Raises OnCancelCommand event. This method is invoked when a child control of the data list raises an OnCommand event and the command name is 'cancel' (case-insensitive). |
public
boolean
|
#
getHasHeader( )
Returns a value indicating whether this control contains header item. This
method is required by |
public
boolean
|
#
getHasFooter( )
Returns a value indicating whether this control contains footer item. This
method is required by |
public
boolean
|
#
getHasSeparators( )
Returns a value indicating whether this control contains separator items.
This method is required by |
public
|
#
generateItemStyle( string $itemType, integer $index )
Returns a style used for rendering items. This method is required by |
public
|
#
renderItem(
Renders an item in the list. This method is required by |
protected
|
#
createItem( integer $itemIndex,
Creates a datalist item instance based on the item type and index. |
protected
|
|
protected
|
#
applyItemStyles( )
Applies styles to items, header, footer and separators. Item styles are applied in a hierarchical way. Style in higher hierarchy will inherit from styles in lower hierarchy. Starting from the lowest hierarchy, the item styles include item's own style, getItemStyle ItemStyle, getAlternatingItemStyle AlternatingItemStyle, getSelectedItemStyle SelectedItemStyle, and getEditItemStyle EditItemStyle. Therefore, if background color is set as red in getItemStyle ItemStyle, getEditItemStyle EditItemStyle will also have red background color unless it is set to a different value explicitly. |
public
|
#
saveState( )
Saves item count in viewstate. This method is invoked right before control state is to be saved. |
public
|
#
loadState( )
Loads item count information from viewstate. This method is invoked right after control state is loaded. |
public
|
|
protected
|
|
protected
|
#
performDataBinding( Traversable $data )
Performs databinding to populate data list items from data source. This method is invoked by dataBind(). You may override this function to provide your own way of data population. |
public
|
#
render(
Renders the data list control. This method overrides the parent implementation. |
getApplication(),
getRequest(),
getResponse(),
getService(),
getSession(),
getUser(),
publishAsset(),
publishFilePath()
|
string |
CMD_SELECT |
'Select' |
#
Command name that TDataList understands. They are case-insensitive. |
string |
CMD_EDIT |
'Edit' |
|
string |
CMD_UPDATE |
'Update' |
|
string |
CMD_DELETE |
'Delete' |
|
string |
CMD_CANCEL |
'Cancel' |
GLOBAL_RAISE_EVENT_LISTENER
|
$_decorator
|