diff options
Diffstat (limited to 'framework/Web/UI')
-rw-r--r-- | framework/Web/UI/WebControls/TDataBoundControl.php | 5 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TDataGrid.php | 103 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TDataList.php | 45 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TEditCommandColumn.php | 4 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TListControl.php | 2 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TRepeater.php | 27 |
6 files changed, 101 insertions, 85 deletions
diff --git a/framework/Web/UI/WebControls/TDataBoundControl.php b/framework/Web/UI/WebControls/TDataBoundControl.php index 026d2e86..b7294383 100644 --- a/framework/Web/UI/WebControls/TDataBoundControl.php +++ b/framework/Web/UI/WebControls/TDataBoundControl.php @@ -196,10 +196,7 @@ abstract class TDataBoundControl extends TWebControl $this->dataBindProperties();
$this->onDataBinding(null);
$data=$this->getData();
- if($data instanceof Traversable)
- $this->performDataBinding($data);
- else if($data!==null)
- throw new TInvalidDataTypeException('databoundcontrol_data_nontraversable');
+ $this->performDataBinding($data);
$this->setIsDataBound(true);
$this->onDataBound(null);
}
diff --git a/framework/Web/UI/WebControls/TDataGrid.php b/framework/Web/UI/WebControls/TDataGrid.php index f7f51e04..ac22fb9c 100644 --- a/framework/Web/UI/WebControls/TDataGrid.php +++ b/framework/Web/UI/WebControls/TDataGrid.php @@ -825,6 +825,7 @@ class TDataGrid extends TBaseDataList $columns->mergeWith($this->_autoColumns);
$items=$this->getItems();
+ $items->clear();
if($columns->getCount()>0)
{
@@ -869,64 +870,74 @@ class TDataGrid extends TBaseDataList $this->reset();
$keys=$this->getDataKeys();
$keys->clear();
- $keyField=$this->getDataKeyField();
- $this->_pagedDataSource=$ds=$this->createPagedDataSource();
- $ds->setDataSource($data);
- $allowPaging=$ds->getAllowPaging();
- if($allowPaging && $ds->getCurrentPageIndex()>=$ds->getPageCount())
- throw new TInvalidDataValueException('datagrid_currentpageindex_invalid');
- // get all columns
- $columns=new TList($this->getColumns());
- if($this->getAutoGenerateColumns())
+ if($data instanceof Traversable)
{
- $autoColumns=$this->createAutoColumns($ds);
- $columns->mergeWith($autoColumns);
- }
+ $keyField=$this->getDataKeyField();
+ $this->_pagedDataSource=$ds=$this->createPagedDataSource();
+ $ds->setDataSource($data);
+ $allowPaging=$ds->getAllowPaging();
+ if($allowPaging && $ds->getCurrentPageIndex()>=$ds->getPageCount())
+ throw new TInvalidDataValueException('datagrid_currentpageindex_invalid');
+ // get all columns
+ $columns=new TList($this->getColumns());
+ if($this->getAutoGenerateColumns())
+ {
+ $autoColumns=$this->createAutoColumns($ds);
+ $columns->mergeWith($autoColumns);
+ }
- $items=$this->getItems();
+ $items=$this->getItems();
- if(($columnCount=$columns->getCount())>0)
- {
- foreach($columns as $column)
- $column->initialize();
- $allowPaging=$ds->getAllowPaging();
- if($allowPaging)
- $this->createPager(-1,-1,$columnCount,$ds);
- $this->createItemInternal(-1,-1,'Header',true,null,$columns);
- $selectedIndex=$this->getSelectedItemIndex();
- $editIndex=$this->getEditItemIndex();
- $index=0;
- $dsIndex=$ds->getAllowPaging()?$ds->getFirstIndexInPage():0;
- foreach($ds as $data)
+ if(($columnCount=$columns->getCount())>0)
{
- if($keyField!=='')
- $keys->add($this->getDataFieldValue($data,$keyField));
- if($index===$editIndex)
- $itemType='EditItem';
- else if($index===$selectedIndex)
- $itemType='SelectedItem';
- else if($index % 2)
- $itemType='AlternatingItem';
- else
- $itemType='Item';
- $items->add($this->createItemInternal($index,$dsIndex,$itemType,true,$data,$columns));
- $index++;
- $dsIndex++;
+ foreach($columns as $column)
+ $column->initialize();
+ $allowPaging=$ds->getAllowPaging();
+ if($allowPaging)
+ $this->createPager(-1,-1,$columnCount,$ds);
+ $this->createItemInternal(-1,-1,'Header',true,null,$columns);
+ $selectedIndex=$this->getSelectedItemIndex();
+ $editIndex=$this->getEditItemIndex();
+ $index=0;
+ $dsIndex=$ds->getAllowPaging()?$ds->getFirstIndexInPage():0;
+ foreach($ds as $data)
+ {
+ if($keyField!=='')
+ $keys->add($this->getDataFieldValue($data,$keyField));
+ if($index===$editIndex)
+ $itemType='EditItem';
+ else if($index===$selectedIndex)
+ $itemType='SelectedItem';
+ else if($index % 2)
+ $itemType='AlternatingItem';
+ else
+ $itemType='Item';
+ $items->add($this->createItemInternal($index,$dsIndex,$itemType,true,$data,$columns));
+ $index++;
+ $dsIndex++;
+ }
+ $this->createItemInternal(-1,-1,'Footer',true,null,$columns);
+ if($allowPaging)
+ $this->createPager(-1,-1,$columnCount,$ds);
+ $this->setViewState('ItemCount',$index,0);
+ $this->setViewState('PageCount',$ds->getPageCount(),0);
+ $this->setViewState('DataSourceCount',$ds->getDataSourceCount(),0);
}
- $this->createItemInternal(-1,-1,'Footer',true,null,$columns);
- if($allowPaging)
- $this->createPager(-1,-1,$columnCount,$ds);
- $this->setViewState('ItemCount',$index,0);
- $this->setViewState('PageCount',$ds->getPageCount(),0);
- $this->setViewState('DataSourceCount',$ds->getDataSourceCount(),0);
+ else
+ {
+ $this->clearViewState('ItemCount');
+ $this->clearViewState('PageCount');
+ $this->clearViewState('DataSourceCount');
+ }
+ $this->_pagedDataSource=null;
}
else
{
+ $this->_pagedDataSource=null;
$this->clearViewState('ItemCount');
$this->clearViewState('PageCount');
$this->clearViewState('DataSourceCount');
}
- $this->_pagedDataSource=null;
}
/**
diff --git a/framework/Web/UI/WebControls/TDataList.php b/framework/Web/UI/WebControls/TDataList.php index 0bdeb4a4..825bb9db 100644 --- a/framework/Web/UI/WebControls/TDataList.php +++ b/framework/Web/UI/WebControls/TDataList.php @@ -1107,29 +1107,32 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs $keys->clear();
$keyField=$this->getDataKeyField();
$itemIndex=0;
- $items=$this->getItems();
- $hasSeparator=$this->_separatorTemplate!==null;
- $selectedIndex=$this->getSelectedItemIndex();
- $editIndex=$this->getEditItemIndex();
- foreach($data as $dataItem)
+ if($data instanceof Traversable)
{
- if($keyField!=='')
- $keys->add($this->getDataFieldValue($dataItem,$keyField));
- if($itemIndex===0 && $this->_headerTemplate!==null)
- $this->_header=$this->createItemInternal(-1,'Header',true,null);
- if($hasSeparator && $itemIndex>0)
- $this->createItemInternal($itemIndex-1,'Separator',true,null);
- if($itemIndex===$editIndex)
- $itemType='EditItem';
- else if($itemIndex===$selectedIndex)
- $itemType='SelectedItem';
- else
- $itemType=$itemIndex%2?'AlternatingItem':'Item';
- $items->add($this->createItemInternal($itemIndex,$itemType,true,$dataItem));
- $itemIndex++;
+ $items=$this->getItems();
+ $hasSeparator=$this->_separatorTemplate!==null;
+ $selectedIndex=$this->getSelectedItemIndex();
+ $editIndex=$this->getEditItemIndex();
+ foreach($data as $dataItem)
+ {
+ if($keyField!=='')
+ $keys->add($this->getDataFieldValue($dataItem,$keyField));
+ if($itemIndex===0 && $this->_headerTemplate!==null)
+ $this->_header=$this->createItemInternal(-1,'Header',true,null);
+ if($hasSeparator && $itemIndex>0)
+ $this->createItemInternal($itemIndex-1,'Separator',true,null);
+ if($itemIndex===$editIndex)
+ $itemType='EditItem';
+ else if($itemIndex===$selectedIndex)
+ $itemType='SelectedItem';
+ else
+ $itemType=$itemIndex%2?'AlternatingItem':'Item';
+ $items->add($this->createItemInternal($itemIndex,$itemType,true,$dataItem));
+ $itemIndex++;
+ }
+ if($itemIndex>0 && $this->_footerTemplate!==null)
+ $this->_footer=$this->createItemInternal(-1,'Footer',true,null);
}
- if($itemIndex>0 && $this->_footerTemplate!==null)
- $this->_footer=$this->createItemInternal(-1,'Footer',true,null);
$this->setViewState('ItemCount',$itemIndex,0);
}
diff --git a/framework/Web/UI/WebControls/TEditCommandColumn.php b/framework/Web/UI/WebControls/TEditCommandColumn.php index b0814a1a..8244981b 100644 --- a/framework/Web/UI/WebControls/TEditCommandColumn.php +++ b/framework/Web/UI/WebControls/TEditCommandColumn.php @@ -156,12 +156,12 @@ class TEditCommandColumn extends TDataGridColumn parent::initializeCell($cell,$columnIndex,$itemType);
$buttonType=$this->getButtonType()=='LinkButton'?'TLinkButton':'TButton';
if($itemType==='Item' || $itemType==='AlternatingItem' || $itemType==='SelectedItem')
- $this->addButtonToCell($cell,'Edit',$this->getUpdateText(),false,'');
+ $this->addButtonToCell($cell,'Edit',$this->getEditText(),false,'');
else if($itemType==='EditItem')
{
$this->addButtonToCell($cell,'Update',$this->getUpdateText(),$this->getCausesValidation(),$this->getValidationGroup());
$cell->getControls()->add(' ');
- $this->addButtonToCell($cell,'Cancel',$this->getUpdateText(),false,'');
+ $this->addButtonToCell($cell,'Cancel',$this->getCancelText(),false,'');
}
}
diff --git a/framework/Web/UI/WebControls/TListControl.php b/framework/Web/UI/WebControls/TListControl.php index 169cc72c..00381890 100644 --- a/framework/Web/UI/WebControls/TListControl.php +++ b/framework/Web/UI/WebControls/TListControl.php @@ -151,6 +151,8 @@ abstract class TListControl extends TDataBoundControl $items=$this->getItems();
if(!$this->getAppendDataBoundItems())
$items->clear();
+ if(!($data instanceof Traversable))
+ return;
$textField=$this->getDataTextField();
if($textField==='')
$textField=0;
diff --git a/framework/Web/UI/WebControls/TRepeater.php b/framework/Web/UI/WebControls/TRepeater.php index fc997323..65b3106e 100644 --- a/framework/Web/UI/WebControls/TRepeater.php +++ b/framework/Web/UI/WebControls/TRepeater.php @@ -372,21 +372,24 @@ class TRepeater extends TDataBoundControl implements INamingContainer protected function performDataBinding($data)
{
$this->reset();
- $itemIndex=0;
$items=$this->getItems();
- $hasSeparator=$this->_separatorTemplate!==null;
- foreach($data as $dataItem)
+ $itemIndex=0;
+ if($data instanceof Traversable)
{
- if($itemIndex===0 && $this->_headerTemplate!==null)
- $this->_header=$this->createItemInternal(-1,'Header',true,null);
- if($hasSeparator && $itemIndex>0)
- $this->createItemInternal($itemIndex-1,'Separator',true,null);
- $itemType=$itemIndex%2==0?'Item':'AlternatingItem';
- $items->add($this->createItemInternal($itemIndex,$itemType,true,$dataItem));
- $itemIndex++;
+ $hasSeparator=$this->_separatorTemplate!==null;
+ foreach($data as $dataItem)
+ {
+ if($itemIndex===0 && $this->_headerTemplate!==null)
+ $this->_header=$this->createItemInternal(-1,'Header',true,null);
+ if($hasSeparator && $itemIndex>0)
+ $this->createItemInternal($itemIndex-1,'Separator',true,null);
+ $itemType=$itemIndex%2==0?'Item':'AlternatingItem';
+ $items->add($this->createItemInternal($itemIndex,$itemType,true,$dataItem));
+ $itemIndex++;
+ }
+ if($itemIndex>0 && $this->_footerTemplate!==null)
+ $this->_footer=$this->createItemInternal(-1,'Footer',true,null);
}
- if($itemIndex>0 && $this->_footerTemplate!==null)
- $this->_footer=$this->createItemInternal(-1,'Footer',true,null);
$this->setViewState('ItemCount',$itemIndex,0);
}
|