From 045b8b2a21873b8747fde66890b094f63c095c93 Mon Sep 17 00:00:00 2001 From: xue <> Date: Sun, 5 Feb 2006 06:35:32 +0000 Subject: Added a demo of TDataGrid showing custom paging. --- .gitattributes | 2 + .../protected/pages/Controls/DataGrid2.page | 10 +++- .../pages/Controls/Samples/TDataGrid/Sample6.page | 24 ++++++++++ .../pages/Controls/Samples/TDataGrid/Sample6.php | 56 ++++++++++++++++++++++ framework/Collections/TPagedDataSource.php | 6 +-- framework/Web/UI/WebControls/TDataGrid.php | 14 +++--- 6 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.page create mode 100644 demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php diff --git a/.gitattributes b/.gitattributes index 772e65f1..2737732c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -130,6 +130,8 @@ demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample4.page -text demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample4.php -text demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample5.page -text demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample5.php -text +demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.page -text +demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php -text demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample1.page -text demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample1.php -text demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.page -text diff --git a/demos/quickstart/protected/pages/Controls/DataGrid2.page b/demos/quickstart/protected/pages/Controls/DataGrid2.page index 4c295f5a..1a55c213 100644 --- a/demos/quickstart/protected/pages/Controls/DataGrid2.page +++ b/demos/quickstart/protected/pages/Controls/DataGrid2.page @@ -22,10 +22,10 @@ The following example turns the datagrid in public function pageIndexChanged($sender,$param) { @@ -40,6 +40,12 @@ The following example enables the paging functionality of the datagrid shown in

Custom Paging

+

+The paging functionality shown above requires loading all data into memory, even though only a portion of them is displayed in a page. For large datasets, this is inefficient and may not always be feasible. TDataGrid provides custom paging to solve this problem. Custom paging only requires the portion of the data to be displayed to end users. +

+

+To enable custom paging, set both AllowPaging and AllowCustomPaging to true. Notify TDataGrid the total number of data items (rows) available by setting VirtualItemCount. And respond to the OnPageIndexChanged event. In the event handler, use the NewPageIndex property of the event parameter to fetch the new page of data from data source. For MySQL database, this can be done by using LIMIT clause in an SQL select statement. +

Extending TDataGrid

diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.page b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.page new file mode 100644 index 00000000..c8a8c9a2 --- /dev/null +++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.page @@ -0,0 +1,24 @@ + + +

TDataGrid Sample 6

+

Custom Paging

+ + + +
\ No newline at end of file diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php new file mode 100644 index 00000000..90e3f7fe --- /dev/null +++ b/demos/quickstart/protected/pages/Controls/Samples/TDataGrid/Sample6.php @@ -0,0 +1,56 @@ +getData(); + $page=array(); + for($i=0;$i<$rows;++$i) + { + if($offset+$i<$this->getRowCount()) + $page[$i]=$data[$offset+$i]; + } + return $page; + } + + /** + * Returns total number of data rows. + * In real DB applications, this may be replaced by an SQL select + * query with count(). + * @return integer total number of data rows + */ + protected function getRowCount() + { + return 19; + } + + public function onLoad($param) + { + if(!$this->IsPostBack) + { + $this->DataGrid->DataSource=$this->getDataRows(0,$this->DataGrid->PageSize); + $this->DataGrid->dataBind(); + } + } + + public function changePage($sender,$param) + { + $this->DataGrid->CurrentPageIndex=$param->NewPageIndex; + $offset=$param->NewPageIndex*$this->DataGrid->PageSize; + $this->DataGrid->DataSource=$this->getDataRows($offset,$this->DataGrid->PageSize); + $this->DataGrid->dataBind(); + } +} + +?> \ No newline at end of file diff --git a/framework/Collections/TPagedDataSource.php b/framework/Collections/TPagedDataSource.php index 02c15b64..6192b1f7 100644 --- a/framework/Collections/TPagedDataSource.php +++ b/framework/Collections/TPagedDataSource.php @@ -152,7 +152,7 @@ class TPagedDataSource extends TComponent implements IteratorAggregate /** * @return integer user-assigned number of items in data source Defaults to 0. */ - public function getVirtualCount() + public function getVirtualItemCount() { return $this->_virtualCount; } @@ -160,12 +160,12 @@ class TPagedDataSource extends TComponent implements IteratorAggregate /** * @param integer user-assigned number of items in data source */ - public function setVirtualCount($value) + public function setVirtualItemCount($value) { if(($value=TPropertyValue::ensureInteger($value))>=0) $this->_virtualCount=$value; else - throw new TInvalidDataValueException('pageddatasource_virtualcount_invalid'); + throw new TInvalidDataValueException('pageddatasource_virtualitemcount_invalid'); } /** diff --git a/framework/Web/UI/WebControls/TDataGrid.php b/framework/Web/UI/WebControls/TDataGrid.php index b0dafb5d..57d00ac8 100644 --- a/framework/Web/UI/WebControls/TDataGrid.php +++ b/framework/Web/UI/WebControls/TDataGrid.php @@ -79,7 +79,7 @@ Prado::using('System.Web.UI.WebControls.TTable'); * 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 VirtualCount property and + * 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. @@ -504,19 +504,19 @@ class TDataGrid extends TBaseDataList implements INamingContainer /** * @return integer virtual number of items in the grid. Defaults to 0, meaning not set. */ - public function getVirtualCount() + public function getVirtualItemCount() { - return $this->getViewState('VirtualCount',0); + return $this->getViewState('VirtualItemCount',0); } /** * @param integer virtual number of items in the grid */ - public function setVirtualCount($value) + public function setVirtualItemCount($value) { if(($value=TPropertyValue::ensureInteger($value))<0) - throw new TInvalidDataValueException('datagrid_virtualcount_invalid'); - $this->setViewState('VirtualCount',$value,0); + throw new TInvalidDataValueException('datagrid_virtualitemcount_invalid'); + $this->setViewState('VirtualItemCount',$value,0); } /** @@ -794,7 +794,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer $ds->setPageSize($this->getPageSize()); $ds->setAllowPaging($this->getAllowPaging()); $ds->setAllowCustomPaging($this->getAllowCustomPaging()); - $ds->setVirtualCount($this->getVirtualCount()); + $ds->setVirtualItemCount($this->getVirtualItemCount()); return $ds; } -- cgit v1.2.3