如何在CGridView中设置每页显示的项目数?

5

我在Yii中有一个项目,其中有一个CGridView默认每页显示10条记录。如何将其设置为每页100条记录?

3个回答

11

您可以按以下步骤在模型的搜索功能中进行配置:

public function search()
{
    $criteria=new CDbCriteria;

    $criteria->compare('id',$this->id,true);
    $criteria->compare('start_year',$this->start_year,true);
    $criteria->compare('end_year',$this->end_year,true);
    $criteria->compare('ref_lang_id',$this->ref_lang_id);
    $criteria->compare('submitted_at',$this->submitted_at,true);
    $criteria->compare('ref_submitted_user_id',$this->ref_submitted_user_id,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'pagination' => array(
            'pageSize' => 30,
        ),
    ));
}

7
请在你的视图中找到CGridView小部件呈现的位置,并配置数据提供程序的pagination属性:
$this->widget('zii.widgets.CGridView', array(
    'dataProvider' => array(
         /* other options for the data provider... */
        'pagination' => array('pageSize' => 100),
    ),
    /* other options for the grid view... */
));

@MickSegvezent:看起来是数据提供程序覆盖了它。请查看更新。 - Jon
@CarlosAlbertoMartínezGadea:这只是一个示例,告诉你该怎么做,而不是让你把它当成魔法咒语放入你的代码中,无论什么情况都能使它奏效。可能仍有数百万种原因导致你遇到问题。 - Jon
@Jon,感谢您回复我。实际上,我想再次评论一下,因为它没有为我工作的原因是我当时正在使用CArrayDataProvider,它不能直接与“pagination”参数一起使用。虽然它与常规的CActiveDataProvider非常兼容。我已经删除了我的最后一条评论,以便不会用那个简单而不具体的评论来搞乱任何人 ;) - xarlymg89

0

您可以通过下拉菜单配置每页显示的项目数。

enter image description here

要创建像这样的部分,请按照以下步骤操作。

为屏幕截图上的“显示1-10个结果,共128个”部分定义自定义模板。

将此代码片段添加到您的Gridview属性数组中。

'summaryText' => 'Displaying {start}-{end} of {count} result(s). ' .
    CHtml::dropDownList('pageSize', $pageSize, Yii::app()->params['pageSizeOptions'], array('class' => 'change-pageSize')) .' rows per page',

将此行添加到视图顶部。
$pageSize = Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']);

在同一视图中添加更改事件。
jQuery(function ($) {
$('body').on('change','.change-pageSize', function () {
    $.fn.yiiGridView.update('my-grid', {data: {pageSize: $(this).val()}
    })
});
});

在模型搜索功能中添加此行代码,以设置活动数据提供程序中所选行的计数。
$pageSize = Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']);

然后在控制器中通过ajax接收从视图发送的页面大小参数。在控制器中使用以下代码行。

if (isset($_GET['pageSize'])) {
                Yii::app()->user->setState('pageSize', (int) $_GET['pageSize']);
            }

在 Params.php 中添加此配置

'defaultPageSize' => 20,
'pageSizeOptions' => array(-1 =>'All' , 10 => 10, 20 => 20, 50 => 50, 100 => 100, 500 => 500),

这个对我有用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接