我有一个简单的CGridView,它来自CActiveDataProvider。目前,我不确定这种情况发生了多长时间,它没有显示启用了pagenation的视图中的所有数据项。
我的标题显示“显示9个结果中的1-7个”,但没有更多页面的按钮。如果我将数据提供程序的pagenation属性的pageSize设置为较小的数字,我最终将获得分页按钮,但它似乎在第一页上显示的项目少于第二页。例如,如果我将CActiveDataProvider的pageSize设置为3,我会得到2,2,3(每页上的项目),而不是我预期的3,3,1。
如果我将pageSize设置为9到11之间的任何值,那么有些项目我看不到,因为我只有一页而不是所有项目都显示出来(如果我将pageSize设置为9,则“1-6 of 9” )。
$criteria=new CDbCriteria;
$criteria->with = array('registrations');
$criteria->addCondition('registrations.id IS NOT NULL');
$criteria->addCondition('registered = false');
$criteria->together = true;
$dataProvider = new CActiveDataProvider('Skier', array('criteria'=>$criteria));
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array('name'=>'fullname', 'header'=>'Name'),
array(
'name'=>'programs_names',
'header'=>'Programs',
'value'=>'$data->programs_names',
),
<More items here>
)
));
任何人都知道什么会导致页面变形如此不稳定?
编辑:此外,将CActiveDataProvider更改为CArrayDataProvider也能正常工作,我得到9个结果中的9个。这将暂时起作用,因为我有小数据集,但我宁愿弄清楚问题可能是什么。
$dataProvider = new CArrayDataProvider(Skier::model()->findAll($criteria));
答案 0 :(得分:1)
如果您使用的是复杂查询,请尝试使用
$count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM tbl_user')->queryScalar();
$sql='SELECT * FROM tbl_user';
$dataProvider=new CSqlDataProvider($sql, array(
'totalItemCount'=>$count,
'sort'=>array(
'attributes'=>array(
'id', 'username', 'email',
),
),
'pagination'=>array(
'pageSize'=>10,
),
));
// $dataProvider->getData() will return a list of arrays.
然后您可以将$ dataProvider传递给CGridView
有关将自定义查询用作dataProvider的更多文档,请检查here.
答案 1 :(得分:1)
我有这样的问题。这是由于数据库中的重复条目(主键)。
答案 2 :(得分:1)
我必须将$criteria->with
及其together=true
放在if()
内:
if( (int) $this->categoria_id > 0) {
$criteria->with = Array (
'categorie'=> Array (
'together' => true,
)
);
$criteria->compare ('categorie.id', $this->categoria_id);
}
否则 CActiveDataProvider分页与together=true
并且没有传递参数会返回错误的计数
答案 3 :(得分:0)
要准确显示所有记录,'计算行数,然后'将$ countResult提供给pageSize',例如
首先计算行数(这是一个例子,'用户'='你的模型名称'))
$countResult = User::model()->countByAttributes(array('record_name' => $matched_record_name));
OR
$countResult = User::model()->count($condition);
然后将$ countResult提供给pageSize
'pagination'=>array(
'pageSize' => intval($countResult),
)),
答案 4 :(得分:0)
尝试将以下内容添加到“Skier”模型的搜索方法中:
$criteria->group = "id";
或者:
$criteria->group = "t.id";