CArrayDataProvider可以用作带exportablegridbehavior的数据源吗?

时间:2014-02-26 12:26:18

标签: yii yii-extensions cactivedataprovider

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'],

  ));

1 个答案:

答案 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]));