CGridView分页不起作用。警予

时间:2015-07-02 04:52:41

标签: php mysql yii pagination

我的视图中有一个表单,它从下拉列表中选择列。 SqlDataProvider用于从生成的Query

中获取数据

我一直在尝试将CGridView与SQLDataProvider一起使用,它的工作有点好,但仍然存在分页问题。我没有任何keyField所以我给它第一列,没有keyField它没有工作。

这是我的行动:

public function actionIndex()
{
    $tables = Yii::app()->db->schema->getTables();

    if(isset($_POST['yt0'])){ //if from submitted

        $query = $this->generateQuery();

        $count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM ( ' . $query . ' ) as count')->queryScalar();

        $dataProvider = new CSqlDataProvider($query, array(
            'keyField' => $firstColumn,
            'totalItemCount'=> $count,
            'pagination'=> array(
                'pageSize'=>20,
            ),
        ));

        $columns = $this->getColumnNamesWithoutTable();

        $this->render('index',
            array(  'tables' => $tables,
                    'query' => $query,
                    'dataProvider' => $dataProvider,
                    'columns' => $columns
            )
        );

    }else{

        $this->render('index', array('tables' => $tables));
    }
}

以下是视图中的窗口小部件代码,根据我读过的内容,分页应该自动运行,是因为我使用的是自定义查询而不是Yii模型?

$this->widget('zii.widgets.grid.CGridView', array(
            'dataProvider'=>$dataProvider,
            'enablePagination'=> true,
));

它首次显示数据,但下一个按钮不起作用。

2 个答案:

答案 0 :(得分:1)

我刚刚在sqldataprovider中添加了totalitemcount,并且对任何人来说仍然有用,

 $dataProvider=new CSqlDataProvider($sql, array(
                'pagination'=>array(
                    'pageSize'=>10,
                ),
                'totalItemCount'=>'100000'
 ));

答案 1 :(得分:0)

'关键字段' => $ firstColumn

$ firstColumn值是什么。

Keyfield必须是CSqlDataProvider

退出的数组的索引