Yii 關於CSqlDataProvider和CGridView的合併使用

今天遇到個問題,我將CSqlDataProvider數據代入CGridView的時候,數據能正常使用,但按鈕就不能使用了,會提示出錯。 php

問過些朋友,原來sqlDataProvider 中的數據集 是一個二維數組,原始的CGRidView 裏面的CColumnButton 默認用的是一個Ar  但你用sqlDataProvider後就變成了關聯數組了。因此 url生成那裏就出錯了。 sql

$data  可能表示一個AR 或者是一個數組 數組

當用SqlDataProvider ,ArrayDataProvider 時就是一個數組,這時候 CButtonColumn 的三個默認url 就須要本身手動修改了 否則就出錯了
app

下面附上一段自動生成CGridView的代碼,只須要將你獲得的CSqlDataProvider數據輸入便可。 ide

/**
     * @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);
    }
相關文章
相關標籤/搜索