From 0054751b4abbb98faf378c8d0517a22be14b6c96 Mon Sep 17 00:00:00 2001 From: xue <> Date: Wed, 21 Jun 2006 01:02:05 +0000 Subject: Fixed #230. --- framework/Web/UI/WebControls/TDataList.php | 61 +++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 5 deletions(-) (limited to 'framework') diff --git a/framework/Web/UI/WebControls/TDataList.php b/framework/Web/UI/WebControls/TDataList.php index b2bd9229..be1a9130 100644 --- a/framework/Web/UI/WebControls/TDataList.php +++ b/framework/Web/UI/WebControls/TDataList.php @@ -115,6 +115,7 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs * @var Itemplate various item templates */ private $_itemTemplate=null; + private $_emptyTemplate=null; private $_alternatingItemTemplate=null; private $_selectedItemTemplate=null; private $_editItemTemplate=null; @@ -362,6 +363,39 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs return $this->_footer; } + /** + * @return ITemplate the template applied when no data is bound to the datalist + */ + public function getEmptyTemplate() + { + return $this->_emptyTemplate; + } + + /** + * @param ITemplate the template applied when no data is bound to the datalist + * @throws TInvalidDataTypeException if the input is not an {@link ITemplate} or not null. + */ + public function setEmptyTemplate($value) + { + if($value instanceof ITemplate || $value===null) + $this->_emptyTemplate=$value; + else + throw new TInvalidDataTypeException('datalist_template_required','EmptyTemplate'); + } + + /** + * @return TStyle the style for the content representing no data is bounded. + */ + public function getEmptyStyle() + { + if(($style=$this->getViewState('EmptyStyle',null))===null) + { + $style=new TStyle; + $this->setViewState('EmptyStyle',$style,null); + } + return $style; + } + /** * @return ITemplate the separator template */ @@ -935,6 +969,7 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs $headerStyle=$this->getViewState('HeaderStyle',null); $footerStyle=$this->getViewState('FooterStyle',null); + $emptyStyle=$this->getViewState('EmptyStyle',null); $separatorStyle=$this->getViewState('SeparatorStyle',null); foreach($this->getControls() as $index=>$item) @@ -949,6 +984,10 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs if($footerStyle) $item->getStyle()->mergeWith($footerStyle); break; + case 'Empty': + if($emptyStyle) + $item->getStyle()->mergeWith($emptyStyle); + break; case 'Separator': if($separatorStyle) $item->getStyle()->mergeWith($separatorStyle); @@ -1012,6 +1051,9 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs case 'Footer': $template=$this->_footerTemplate; break; + case 'Empty': + $template=$this->_emptyTemplate; + break; case 'Item': $template=$this->_itemTemplate; break; @@ -1109,6 +1151,8 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs if($this->_footerTemplate!==null) $this->_footer=$this->createItemInternal(-1,'Footer',false,null); } + else if($this->_emptyTemplate!==null) + $this->createItemInternal(-1,'Empty',false,null); $this->clearChildState(); } @@ -1150,6 +1194,8 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs } if($itemIndex>0 && $this->_footerTemplate!==null) $this->_footer=$this->createItemInternal(-1,'Footer',true,null); + if($itemIndex===0 && $this->_emptyTemplate!==null) + $this->createItemInternal(-1,'Empty',true,null); $this->setViewState('ItemCount',$itemIndex,0); } @@ -1163,8 +1209,13 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs if($this->getHasControls()) { $this->applyItemStyles(); - $repeatInfo=$this->getRepeatInfo(); - $repeatInfo->renderRepeater($writer,$this); + if($this->getItemCount()===0 && $this->_emptyTemplate!==null) + parent::render($writer); + else + { + $repeatInfo=$this->getRepeatInfo(); + $repeatInfo->renderRepeater($writer,$this); + } } } } @@ -1317,7 +1368,7 @@ class TDataListItem extends TWebControl implements INamingContainer } /** - * @return string item type, can be 'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager' + * @return string item type */ public function getItemType() { @@ -1325,11 +1376,11 @@ class TDataListItem extends TWebControl implements INamingContainer } /** - * @param mixed data to be associated with the item + * @param string item type. Valid values include 'Header','Footer','Empty','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager'. */ public function setItemType($value) { - $this->_itemType=TPropertyValue::ensureEnum($value,'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager'); + $this->_itemType=TPropertyValue::ensureEnum($value,'Header','Footer','Empty','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager'); } /** -- cgit v1.2.3