* @link http://www.pradosoft.com/ * @copyright Copyright © 2005 PradoSoft * @license http://www.pradosoft.com/license/ * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls */ /** * TDataGrid class * * TDataGrid represents a data bound and updatable grid control. * * To use TDataGrid, sets its DataSource property and invokes dataBind() * afterwards. The data will be populated into the TDataGrid and saved in the Items property. * * Each item is associated with a row of data and will be displayed as a row in table. * A data item can be at one of three states: normal, selected and edit. * The state determines how the item will be displayed. For example, if an item * is in edit state, it may be displayed as a table row with input text boxes instead * static text as in normal state. * To change the state of a data item, set either the EditItemIndex property * or the SelectedItemIndex property. * * A datagrid is specified with a list of columns. Each column specifies how the corresponding * table column will be displayed. For example, the header/footer text of that column, * the cells in that column, and so on. The following column types are provided by the framework, * - TBoundColumn, associated with a specific field in datasource and displays the corresponding data. * - TEditCommandColumn, displaying edit/update/cancel command buttons * - TButtonColumn, displaying generic command buttons that may be bound to specific field in datasource. * - THyperLinkColumn, displaying a hyperlink that may be boudn to specific field in datasource. * - TTemplateColumn, displaying content based on templates. * * There are three ways to specify columns for a datagrid. * * Note, automatically generated columns cannot be accessed via Columns property. * * TDataGrid supports sorting. If the AllowSorting is set to true, a column * whose SortExpression is not empty will have its header text displayed as a link button. * Clicking on the link button will raise OnSortCommand event. You can respond to this event, * sort the data source according to the event parameter, and then invoke databind on the datagrid. * * TDataGrid supports paging. If the AllowPaging is set to true, a pager will be displayed * on top and/or bottom of the table. How the pager will be displayed is determined by PagerDisplay * and PagerButtonCount properties. The former decides the position of the pager and latter * specifies how many buttons are to be used for paging purpose. Clicking on a pager button will raise * an OnPageCommand event. You can respond to this event, specify the page to be displayed by * setting CurrentPageIndex property, and then invoke databind on the datagrid. * * TDataGrid supports two kinds of paging. The first one is based on the number of data items in * datasource. The number of pages PageCount is calculated based the item number and the * PageSize property. The datagrid will manage which section of the data source to be displayed * based on the CurrentPageIndex property. * The second approach calculates the page number based on the VirtualItemCount property and * the PageSize property. The datagrid will always display from the beginning of the datasource * upto the number of PageSize> data items. This approach is especially useful when the datasource may * contain too many data items to be managed by the datagrid efficiently. * * When the datagrid contains a button control that raises an OnCommand * event, the event will be bubbled up to the datagrid control. * If the event's command name is recognizable by the datagrid control, * a corresponding item event will be raised. The following item events will be * raised upon a specific command: * - OnEditCommand, edit * - OnCancelCommand, cancel * - OnSelectCommand, select * - OnDeleteCommand, delete * - OnUpdateCommand, update * - OnPageCommand, page * - OnSortCommand, sort * The data list will always raise an OnItemCommand * upon its receiving a bubbled OnCommand event. * * An OnItemCreated event will be raised right after each item is created in the datagrid. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGrid extends TBaseDataList { private $_columns=null; private $_autoColumns=null; private $_items=null; private $_header=null; private $_footer=null; private $_pager=null; private $_pagedDataSource=null; /** * @return string tag name of the datagrid */ protected function getTagName() { return 'table'; } public function getColumns() { if(!$this->_columns) $this->_columns=new TDataGridColumnCollection; return $this->_columns; } public function getItems() { if(!$this->_items) $this->_items=new TDataGridItemCollection; return $this->_items; } /** * Creates a style object for the control. * This method creates a {@link TTableStyle} to be used by datagrid. * @return TStyle control style to be used */ protected function createStyle() { return new TTableStyle; } /** * @return string the URL of the background image for the datagrid */ public function getBackImageUrl() { return $this->getStyle()->getBackImageUrl(); } /** * Sets the URL of the background image for the datagrid * @param string the URL */ public function setBackImageUrl($value) { $this->getStyle()->setBackImageUrl($value); } /** * @return TTableItemStyle the style for each alternating item */ public function getAlternatingItemStyle() { if(($style=$this->getViewState('AlternatingItemStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('AlternatingItemStyle',$style,null); } return $style; } /** * @return TTableItemStyle the style for item */ public function getItemStyle() { if(($style=$this->getViewState('ItemStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('ItemStyle',$style,null); } return $style; } /** * @return TTableItemStyle the style for selected item */ public function getSelectedItemStyle() { if(($style=$this->getViewState('SelectedItemStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('SelectedItemStyle',$style,null); } return $style; } /** * @return TTableItemStyle the style for edit item */ public function getEditItemStyle() { if(($style=$this->getViewState('EditItemStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('EditItemStyle',$style,null); } return $style; } /** * @return TTableItemStyle the style for header */ public function getHeaderStyle() { if(($style=$this->getViewState('HeaderStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('HeaderStyle',$style,null); } return $style; } /** * @return TDataGridItem the header item */ public function getHeader() { return $this->_header; } /** * @return TTableItemStyle the style for footer */ public function getFooterStyle() { if(($style=$this->getViewState('FooterStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('FooterStyle',$style,null); } return $style; } /** * @return TDataGridItem the footer item */ public function getFooter() { return $this->_footer; } /** * @return TDataGridPagerStyle the style for pager */ public function getPagerStyle() { if(($style=$this->getViewState('PagerStyle',null))===null) { $style=new TDataGridPagerStyle; $this->setViewState('PagerStyle',$style,null); } return $style; } /** * @return TDataGridItem the pager */ public function getPager() { return $this->_pager; } /** * @return TDataGridItem the selected item, null if no item is selected. */ public function getSelectedItem() { $index=$this->getSelectedItemIndex(); $items=$this->getItems(); if($index>=0 && $index<$items->getCount()) return $items->itemAt($index); else return null; } /** * @return integer the zero-based index of the selected item in {@link getItems Items}. * A value -1 means no item selected. */ public function getSelectedItemIndex() { return $this->getViewState('SelectedItemIndex',-1); } /** * Selects an item by its index in {@link 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. * @param integer the selected item index */ public function setSelectedItemIndex($value) { if(($value=TPropertyValue::ensureInteger($value))<0) $value=-1; if(($current=$this->getSelectedItemIndex())!==$value) { $this->setViewState('SelectedItemIndex',$value,-1); $items=$this->getItems(); $itemCount=$items->getCount(); if($current>=0 && $current<$itemCount) { $item=$items->itemAt($current); if($item->getItemType()!=='EditItem') $item->setItemType($current%2?'AlternatingItem':'Item'); } if($value>=0 && $value<$itemCount) { $item=$items->itemAt($value); if($item->getItemType()!=='EditItem') $item->setItemType('SelectedItem'); } } } /** * @return TDataGridItem the edit item */ public function getEditItem() { $index=$this->getEditItemIndex(); $items=$this->getItems(); if($index>=0 && $index<$items->getCount()) return $items->itemAt($index); else return null; } /** * @return integer the zero-based index of the edit item in {@link getItems Items}. * A value -1 means no item is in edit mode. */ public function getEditItemIndex() { return $this->getViewState('EditItemIndex',-1); } /** * Edits an item by its index in {@link 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. * @param integer the edit item index */ public function setEditItemIndex($value) { if(($value=TPropertyValue::ensureInteger($value))<0) $value=-1; if(($current=$this->getEditItemIndex())!==$value) { $this->setViewState('EditItemIndex',$value,-1); $items=$this->getItems(); $itemCount=$items->getCount(); if($current>=0 && $current<$itemCount) $items->itemAt($current)->setItemType($current%2?'AlternatingItem':'Item'); if($value>=0 && $value<$itemCount) $items->itemAt($value)->setItemType('EditItem'); } } /** * @return boolean whether the custom paging is enabled Defaults to false. */ public function getAllowCustomPaging() { return $this->getViewState('AllowCustomPaging',false); } /** * @param boolean whether the custom paging is enabled */ public function setAllowCustomPaging($value) { $this->setViewState('AllowCustomPaging',TPropertyValue::ensureBoolean($value),false); } /** * @return boolean whether paging is enabled. Defaults to false. */ public function getAllowPaging() { return $this->getViewState('AllowPaging',false); } /** * @param boolean whether paging is enabled */ public function setAllowPaging($value) { $this->setViewState('AllowPaging',TPropertyValue::ensureBoolean($value),false); } /** * @return boolean whether sorting is enabled. Defaults to false. */ public function getAllowSorting() { return $this->getViewState('AllowSorting',false); } /** * @param boolean whether sorting is enabled */ public function setAllowSorting($value) { $this->setViewState('AllowSorting',TPropertyValue::ensureBoolean($value),false); } /** * @return boolean whether datagrid columns should be automatically generated Defaults to false. */ public function getAutoGenerateColumns() { return $this->getViewState('AutoGenerateColumns',false); } /** * @param boolean whether datagrid columns should be automatically generated */ public function setAutoGenerateColumns($value) { $this->setViewState('AutoGenerateColumns',TPropertyValue::ensureBoolean($value),false); } /** * @return integer the index of the current page. Defaults to 0. */ public function getCurrentPageIndex() { return $this->getViewState('CurrentPageIndex',0); } /** * @param integer the index of the current page */ public function setCurrentPageIndex($value) { if(($value=TPropertyValue::ensureInteger($value))<0) throw new TInvalidDataValueException('datagrid_currentpageindex_invalid'); $this->setViewState('CurrentPageIndex',$value,0); } /** * @return integer the number of rows displayed within a page. Defaults to 10. */ public function getPageSize() { return $this->getViewState('PageSize',10); } /** * @param integer the number of rows displayed within a page */ public function setPageSize($value) { if(($value=TPropertyValue::ensureInteger($value))<1) throw new TInvalidDataValueException('datagrid_pagesize_invalid'); $this->setViewState('PageSize',TPropertyValue::ensureInteger($value),10); } public function getPageCount() { if($this->_pagedDataSource) return $this->_pagedDataSource->getPageCount(); return $this->getViewState('PageCount',0); } /** * @return integer virtual number of items in the grid. Defaults to 0, meaning not set. */ public function getVirtualItemCount() { return $this->getViewState('VirtualItemCount',0); } /** * @param integer virtual number of items in the grid */ public function setVirtualItemCount($value) { if(($value=TPropertyValue::ensureInteger($value))<0) throw new TInvalidDataValueException('datagrid_virtualitemcount_invalid'); $this->setViewState('VirtualItemCount',$value,0); } /** * @return boolean whether the header should be displayed Defaults to true. */ public function getShowHeader() { return $this->getViewState('ShowHeader',true); } /** * @param boolean whether the header should be displayed */ public function setShowHeader($value) { $this->setViewState('ShowHeader',TPropertyValue::ensureBoolean($value),true); } /** * @return boolean whether the footer should be displayed Defaults to true. */ public function getShowFooter() { return $this->getViewState('ShowFooter',true); } /** * @param boolean whether the footer should be displayed */ public function setShowFooter($value) { $this->setViewState('ShowFooter',TPropertyValue::ensureBoolean($value),true); } /** * Handles BubbleEvent. * This method overrides parent's implementation to handle * {@link onItemCommand ItemCommand} event which is bubbled from * {@link TDataGridItem} child controls. * If the event parameter is {@link TDataGridCommandEventParameter} and * the command name is a recognized one, which includes 'select', 'edit', * 'delete', 'update', and 'cancel' (case-insensitive), then a * corresponding command event is also raised (such as {@link onEditCommand EditCommand}). * This method should only be used by control developers. * @param TControl the sender of the event * @param TEventParameter event parameter * @return boolean whether the event bubbling should stop here. */ protected function onBubbleEvent($sender,$param) { if($param instanceof TDataGridCommandEventParameter) { $this->onItemCommand($param); $command=$param->getCommandName(); if(strcasecmp($command,'select')===0) { $this->setSelectedIndex($param->getItem()->getItemIndex()); $this->onSelectedIndexChanged(null); return true; } else if(strcasecmp($command,'edit')===0) { $this->onEditCommand($param); return true; } else if(strcasecmp($command,'delete')===0) { $this->onDeleteCommand($param); return true; } else if(strcasecmp($command,'update')===0) { $this->onUpdateCommand($param); return true; } else if(strcasecmp($command,'cancel')===0) { $this->onCancelCommand($param); return true; } else if(strcasecmp($command,'sort')===0) { $this->onSortCommand(new TDataGridSortCommandEventParameter($sender,$param->getCommandParameter())); return true; } else if(strcasecmp($command,'page')===0) { $p=$param->getCommandParameter(); if(strcasecmp($p,'next')) $pageIndex=$this->getCurrentPageIndex()+1; else if(strcasecmp($p,'prev')) $pageIndex=$this->getCurrentPageIndex()-1; else $pageIndex=TPropertyValue::ensureInteger($p)-1; $this->onPageIndexChanged(new TDataGridPageChangedEventParameter($sender,$pageIndex)); return true; } } return false; } /** * Raises CancelCommand event. * This method is invoked when a button control raisesCommand event * withcancel command name. * @param TDataGridCommandEventParameter event parameter */ public function onCancelCommand($param) { $this->raiseEvent('CancelCommand',$this,$param); } /** * Raises DeleteCommand event. * This method is invoked when a button control raises Command event * with delete command name. * @param TDataGridCommandEventParameter event parameter */ public function onDeleteCommand($param) { $this->raiseEvent('DeleteCommand',$this,$param); } /** * Raises EditCommand event. * This method is invoked when a button control raises Command event * with edit command name. * @param TDataGridCommandEventParameter event parameter */ public function onEditCommand($param) { $this->raiseEvent('EditCommand',$this,$param); } /** * Raises ItemCommand event. * This method is invoked when a button control raises Command event. * @param TDataGridItemCommandEventParameter event parameter */ public function onItemCommand($param) { $this->raiseEvent('ItemCommand',$this,$param); } /** * Raises SortCommand event. * This method is invoked when a button control raises Command event * with sort command name. * @param TDataGridSortCommandEventParameter event parameter */ public function onSortCommand($param) { $this->raiseEvent('SortCommand',$this,$param); } /** * Raises UpdateCommand event. * This method is invoked when a button control raises Command event * with update command name. * @param TDataGridCommandEventParameter event parameter */ public function onUpdateCommand($param) { $this->raiseEvent('UpdateCommand',$this,$param); } /** * Raises ItemCreated event. * This method is invoked right after a datagrid item is created and before * added to page hierarchy. * @param TDataGridItemEventParameter event parameter */ public function onItemCreated($param) { $this->raiseEvent('ItemCreated',$this,$param); } /** * Raises ItemDataBound event. * This method is invoked for each datagrid item after it performs * databinding. * @param TDataGridItemEventParameter event parameter */ public function onItemDataBound($param) { $this->raiseEvent('ItemDataBound',$this,$param); } /** * Raises PageIndexChanged event. * This method is invoked when current page is changed. * @param TDataGridPageChangedEventParameter event parameter */ public function onPageIndexChanged($param) { $this->raiseEvent('PageIndexChanged',$this,$param); } } /** * TDataGridItemEventParameter class * * TDataGridItemEventParameter encapsulates the parameter data for * {@link TDataGrid::onItemCreated ItemCreated} event of {@link TDataGrid} controls. * The {@link getItem Item} property indicates the DataList item related with the event. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGridItemEventParameter extends TEventParameter { /** * The TDataGridItem control responsible for the event. * @var TDataGridItem */ private $_item=null; /** * Constructor. * @param TDataGridItem DataList item related with the corresponding event */ public function __construct(TDataGridItem $item) { $this->_item=$item; } /** * @return TDataGridItem DataList item related with the corresponding event */ public function getItem() { return $this->_item; } } /** * TDataGridCommandEventParameter class * * TDataGridCommandEventParameter encapsulates the parameter data for * {@link TDataGrid::onItemCommand ItemCommand} event of {@link TDataGrid} controls. * * The {@link getItem Item} property indicates the DataList item related with the event. * The {@link getCommandSource CommandSource} refers to the control that originally * raises the Command event. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGridCommandEventParameter extends TCommandEventParameter { /** * @var TDataGridItem the TDataGridItem control responsible for the event. */ private $_item=null; /** * @var TControl the control originally raises the Command event. */ private $_source=null; /** * Constructor. * @param TDataGridItem DataList item responsible for the event * @param TControl original event sender * @param TCommandEventParameter original event parameter */ public function __construct($item,$source,TCommandEventParameter $param) { $this->_item=$item; $this->_source=$source; parent::__construct($param->getCommandName(),$param->getCommandParameter()); } /** * @return TDataGridItem the TDataGridItem control responsible for the event. */ public function getItem() { return $this->_item; } /** * @return TControl the control originally raises the Command event. */ public function getCommandSource() { return $this->_source; } } /** * TDataGridSortCommandEventParameter class * * TDataGridSortCommandEventParameter encapsulates the parameter data for * {@link TDataGrid::onSortCommand SortCommand} event of {@link TDataGrid} controls. * * The {@link getCommandSource CommandSource} property refers to the control * that originally raises the Command event, while {@link getSortExpression SortExpression} * gives the sort expression carried with the sort command. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGridSortCommandEventParameter extends TEventParameter { /** * @var string sort expression */ private $_sortExpression=''; /** * @var TControl original event sender */ private $_source=null; /** * Constructor. * @param TControl the control originally raises the Command event. * @param TDataGridCommandEventParameter command event parameter */ public function __construct($source,TDataGridCommandEventParameter $param) { $this->_source=$source; $this->_sortExpression=$param->getCommandParameter(); } /** * @return TControl the control originally raises the Command event. */ public function getCommandSource() { return $this->_source; } /** * @return string sort expression */ public function getSortExpression() { return $this->_sortExpression; } } /** * TDataGridPageChangedEventParameter class * * TDataGridPageChangedEventParameter encapsulates the parameter data for * {@link TDataGrid::onPageIndexChanged PageIndexChanged} event of {@link TDataGrid} controls. * * The {@link getCommandSource CommandSource} property refers to the control * that originally raises the Command event, while {@link getNewPageIndex NewPageIndex} * returns the new page index carried with the page command. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGridPageChangedEventParameter extends TEventParameter { /** * @var integer new page index */ private $_newIndex; /** * @var TControl original event sender */ private $_source=null; /** * Constructor. * @param TControl the control originally raises the Command event. * @param integer new page index */ public function __construct($source,$newPageIndex) { $this->_source=$source; $this->_newIndex=$newPageIndex; } /** * @return TControl the control originally raises the Command event. */ public function getCommandSource() { return $this->_source; } /** * @return integer new page index */ public function getNewPageIndex() { return $this->_newIndex; } } /** * TDataGridItem class * * A TDataGridItem control represents an item in the {@link TDataGrid} control, * such as heading section, footer section, or a data item. * The index and data value of the item can be accessed via {@link getItemIndex ItemIndex}> * and {@link getDataItem DataItem} properties, respectively. The type of the item * is given by {@link getItemType ItemType} property. Property {@link getDataSetIndex DataSetIndex} * gives the index of the item from the bound data source. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGridItem extends TTableRow implements INamingContainer { /** * @var integer index of the data item in the Items collection of DataList */ private $_itemIndex=''; /** * @var integer index of the item from the bound data source */ private $_dataSetIndex=0; /** * type of the TDataGridItem * @var string */ private $_itemType=''; /** * value of the data item * @var mixed */ private $_dataItem=null; /** * Constructor. * @param integer zero-based index of the item in the item collection of DataList * @param string item type, can be 'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager'. */ public function __construct($itemIndex,$dataSetIndex,$itemType) { $this->_itemIndex=$itemIndex; $this->_dataSetIndex=$dataSetIndex; $this->setItemType($itemType); } /** * @return string item type, can be 'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager' */ public function getItemType() { return $this->_itemType; } /** * @param mixed data to be associated with the item */ public function setItemType($value) { $this->_itemType=TPropertyValue::ensureEnum($value,'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager'); } /** * @return integer zero-based index of the item in the item collection of DataList */ public function getItemIndex() { return $this->_itemIndex; } /** * @return integer the index of the datagrid item from the bound data source */ public function getDataSetIndex() { return $this->_dataSetIndex; } /** * @return mixed data associated with the item */ public function getDataItem() { return $this->_dataItem; } /** * @param mixed data to be associated with the item */ public function setDataItem($value) { $this->_dataItem=$value; } /** * Handles BubbleEvent. * This method overrides parent's implementation by wrapping event parameter * for Command event with item information. * @param TControl the sender of the event * @param TEventParameter event parameter * @return boolean whether the event bubbling should stop here. */ protected function onBubbleEvent($sender,$param) { if($param instanceof TCommandEventParameter) { $this->raiseBubbleEvent($this,new TDataGridCommandEventParameter($this,$sender,$param)); return true; } else return false; } } /** * TDataGridItemCollection class. * * TDataGridItemCollection represents a collection of data grid items. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGridItemCollection extends TList { /** * Returns true only when the item to be added is a {@link TDataGridItem}. * This method is invoked before adding an item to the list. * If it returns true, the item will be added to the list, otherwise not. * @param mixed item to be added * @return boolean whether the item can be added to the list */ protected function canAddItem($item) { return ($item instanceof TDataGridItem); } } /** * TDataGridColumnCollection class. * * TDataGridColumnCollection represents a collection of data grid columns. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TDataGridColumnCollection extends TList { /** * Returns true only when the item to be added is a {@link TDataGridItem}. * This method is invoked before adding an item to the list. * If it returns true, the item will be added to the list, otherwise not. * @param mixed item to be added * @return boolean whether the item can be added to the list */ protected function canAddItem($item) { return ($item instanceof TDataGridColumn); } } class TDataGridPagerStyle extends TTableItemStyle { private $_mode=null; private $_nextText=null; private $_prevText=null; private $_buttonCount=null; private $_position=null; private $_visible=null; public function getMode() { return $this->_mode===null?'NextPrev':$this->_mode; } public function setMode($value) { $this->_mode=TPropertyValue::ensureEnum($value,'NextPrev','NumericPages'); } public function getNextPageText() { return $this->_nextText===null?'>':$this->_nextText; } public function setNextPageText($value) { $this->_nextText=$value; } public function getPrevPageText() { return $this->_prevText===null?'<':$this->_prevText; } public function setPrevPageText($value) { $this->_prevText=$value; } public function getPageButtonCount() { return $this->_buttonCount===null?10:$this->_buttonCount; } public function setPageButtonCount($value) { if(($value=TPropertyValue::ensureInteger($value))<1) throw new TInvalidDataValueException('datagridpagerstyle_pagebuttoncount_invalid'); $this->_buttonCount=$value; } public function getPosition() { return $this->_position===null?'Bottom':$this->_position; } public function setPosition($value) { $this->_position=TPropertyValue::ensureEnum($value,'Bottom','Top','TopAndBottom'); } public function getVisible() { return $this->_visible===null?true:$this->_visible; } public function setVisible($value) { $this->_visible=TPropertyValue::ensureBoolean($value); } /** * Resets the style to the original empty state. */ public function reset() { parent::reset(); $this->_visible=null; $this->_position=null; $this->_buttonCount=null; $this->_prevText=null; $this->_nextText=null; $this->_mode=null; } /** * Copies the style content from an existing style * This method overrides the parent implementation by * adding additional TDataGridPagerStyle specific attributes. * @param TStyle source style */ public function copyFrom($style) { parent::copyFrom($style); if($style instanceof TDataGridPagerStyle) { $this->_visible=$style->_visible; $this->_position=$style->_position; $this->_buttonCount=$style->_buttonCount; $this->_prevText=$style->_prevText; $this->_nextText=$style->_nextText; $this->_mode=$style->_mode; } } /** * Merges with a style. * If a style field is not set in the current style but set in the new style * it will take the value from the new style. * This method overrides the parent implementation by * merging with additional TDataGridPagerStyle specific attributes. * @param TStyle the new style */ public function mergeWith($style) { parent::mergeWith($style); if($style instanceof TDataGridPagerStyle) { if($style->_visible!==null && $this->_visible===null) $this->_visible=$style->_visible; if($style->_position!==null && $this->_position===null) $this->_position=$style->_position; if($style->_buttonCount!==null && $this->_buttonCount===null) $this->_buttonCount=$style->_buttonCount; if($style->_prevText!==null && $this->_prevText===null) $this->_prevText=$style->_prevText; if($style->_nextText!==null && $this->_nextText===null) $this->_nextText=$style->_nextText; if($style->_mode!==null && $this->_mode===null) $this->_mode=$style->_mode; } } } ?>