我的视图中有一个表单,该表单从下拉列表中选择列。 SqlDataProvider用于从生成的查询中获取数据

我一直在尝试使用带有SQLDataProvider的CGridView,它的工作效果还不错,但是在分页方面仍然存在一些问题。我没有任何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,
));


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

最佳答案

我只是在sqldataprovider中添加了totalitemcount,它对我有用,如果有人仍然想知道,

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

08-07 08:04