今天遇到个问题,我将CSqlDataProvider数据代入CGridView的时候,数据能正常使用,但按钮就不能使用了,会提示出错。
问过些朋友,原来sqlDataProvider 中的数据集 是一个二维数组,原始的CGRidView 里面的CColumnButton 默认用的是一个Ar 但你用sqlDataProvider后就变成了关联数组了。所以 url生成那里就出错了。
$data 可能表示一个AR 或者是一个数组
当用SqlDataProvider ,ArrayDataProvider 时就是一个数组,这时候 CButtonColumn 的三个默认url 就需要自己手动修改了 不然就出错了
下面附上一段自动生成CGridView的代码,只需要将你得到的CSqlDataProvider数据输入即可。
/**
* @param CSqlDataProvider $dp
* 针对CSqlDataProvider自动生成CGridView的代码
*/
static public function gridView4sqlDataProvider(CSqlDataProvider $dp)
{
$rowSet = $dp->getData();
$firstRow = array();
if (!empty($rowSet)) {
$firstRow = current($rowSet);
}
$columns = '';
foreach (array_keys($firstRow) as $column) {
$columnItem = <<<COL_ITEM
array(
'name'=>'{$column}',
'header'=>'{$column}',
'value'=>'\$data["{$column}"]'
),
COL_ITEM;
$columns .= "\n".$columnItem;
}
$code = <<<TPL
\$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'yourId',
'dataProvider'=>\$dataProvider,
'columns'=>array({$columns}
array(
'class' => 'CButtonColumn',
'viewButtonUrl' => 'Yii::app()->controller->createUrl("view",array("id"=>\$data["id"]))',
'updateButtonUrl' => 'Yii::app()->controller->createUrl("update",array("id"=>\$data["id"]))',
'deleteButtonUrl' => 'Yii::app()->controller->createUrl("delete",array("id"=>\$data["id"]))',
),
),
) );
TPL;
echo $code ; // self::renderCode($code);
}
来源:oschina
链接:https://my.oschina.net/u/555492/blog/144080