ExportableGridBehavior - tinyurl.com/expgrid
这与通常的数据提供者非常相似。但是当与CArrayDataProvider一起使用时,它会导致问题,并在CSV中提供空白数据。是否可以将此扩展名与CArrayDataProvider一起使用。我在Controller中的语法应该是什么样的?
型号代码:searchProfitCurrency方法
$rawData=Yii::app()->db->createCommand($selectStatment)->queryAll();
return new CArrayDataProvider($rawData, array(
'id'=>'id',
'sort'=>array(
'attributes'=>array(
'Currency',
'profitMarginCurrency'
),
),
'pagination'=>array(
'pageSize'=>50,
),
));
控制器代码:
$search_dataProvider = $model->searchProfitCurrency();
$this->exportCSV($search_dataProvider,
array(
$search_dataProvider['Currency'],
$search_dataProvider['profitMarginCurrency'],
));
答案 0 :(得分:0)
我遇到了同样的问题,实际上我不知道作者发布的代码示例是哪种方式,你可以粘贴到这里工作。
我以简单的方式修改了类,现在它对我有用。 所以
在ExportableGridBehavior类中的
if ($data instanceof CActiveDataProvider) {
$this->csvRowHeaders($fileHandle, $attributes, $data->model);
$this->csvRowModels($fileHandle, new CDataProviderIterator($data, 150), $attributes);
} else if ($data instanceof CArrayDataProvider) { // @luca
fputcsv($fileHandle, $attributes, $this->csvDelimiter, $this->csvEnclosure);
foreach ($data->rawData as $i=>$r) {
$row = array();
foreach ($attributes as $attr) {
$row[] = $data->rawData[$i][$attr];
}
fputcsv($fileHandle, $row, $this->csvDelimiter, $this->csvEnclosure);
}
} else if (is_array($data) && current($data) instanceof CModel) {
和
控制器中的
$dataProvider = new CArrayDataProvider($filteredData, array(
'keyField' => 'idvr',
'id'=>'idvr',
'sort'=>array( 'attributes'=>array('numfor','codfis','driscos','nominativo','codtrib','ravved','impdeb'),
'defaultOrder'=>array('driscos'=>'ASC')
),
'pagination' => array( 'pageSize'=>50, ),
'keyField' => 'codfis',
));
if ($this->isExportRequest())
$this->exportCSV($dataProvider, array_keys($dataProvider->rawData[0]));