Serial Numbers(item counts) in GridView

0 0
4
Viewed: 21 235 times
Version: Unknown (update)
Category: How-tos
Written by: PeRoChAk PeRoChAk
Created: Oct 5, 2012
Updated: 13 years ago

You are viewing revision #2 of this wiki article.
This version may not be up to date with the latest version.
You may want to view the differences to the latest version or see the changes made in this revision.

« previous (#1)next (#3) »

Sometime we need to display numbers of items per page with their counting as a serial number.

Here is How we can do it easily in Yii.

Extend CGridColumn

Yii::import('zii.widgets.grid.CGridColumn');
 
class CounterColumn extends CGridColumn {
 

}

We need to set starter value for the counter so, we have

private $i = 0;
    public function init(){
        $pager=$this->grid->dataProvider->pagination;
        if($pager->currentPage==0){
            $this->i=0;
        }else{
            $this->i=$pager->currentPage*$pager->pageSize;
        }
        
    }

We need to use display the value, so we have

public function renderDataCellContent($row, $data) { 
 
        $this->i++;
 
        echo $this->i;
    }

Complete code is as

Yii::import('zii.widgets.grid.CGridColumn');
 
class CounterColumn extends CGridColumn {
 
    private $i = 0;
    public function init(){
        $pager=$this->grid->dataProvider->pagination;
        if($pager->currentPage==0){
            $this->i=0;
        }else{
            $this->i=$pager->currentPage*$pager->pageSize;
        }
        
    }
    public function renderDataCellContent($row, $data) { // $row number is ignored
 
        $this->i++;
 
        echo $this->i;
    }
}

Using

$this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'categories-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		array(
                    'header'=>'Sr #',
                    'class'=>'CounterColumn'
                ),
		'id',
                'name',
		array(
                        'header'=>'Actions',
			'class'=>'CButtonColumn',
                )

));