Vikram Pote
Vikram Pote

Reputation: 5579

Yii2 kartik grid export all columns

I am using kartik grid and want to export all columns present in my table.

Problem is that i want to show only few columns in grid but download all columns in csv file.

Is it possible?

My code

<?php  

$gridColumns = [
    ['class' => 'kartik\grid\SerialColumn'],
    [
        'class' => 'kartik\grid\EditableColumn',
        'attribute' => 'Name',        
        'vAlign'=>'middle',
        'headerOptions'=>['class'=>'kv-sticky-column'],
        'contentOptions'=>['class'=>'kv-sticky-column'],
        'editableOptions'=>['header'=>'Name', 'size'=>'255'],
        'format'=>'text',
    ],
    [

        'attribute' => 'Description',        
        'vAlign'=>'middle',
        'headerOptions'=>['class'=>'kv-sticky-column'],
        'contentOptions'=>['class'=>'kv-sticky-column'],     
        'format'=>'text',
    ],
    ['class' => 'kartik\grid\DataColumn',
        'attribute' => 'image',
        'format' => 'html',
        'value' => function($model, $key, $index, $column) {          
              return Html::img('http://localhost/demo/basic_demo/web/www/img/'.$model->image, ['class' => 'abc','width'=>70,'height'=>70]);          
        },
   ],
    [
        'class'=>'kartik\grid\BooleanColumn',
        'attribute'=>'Status', 
        'vAlign'=>'middle',
    ],

    [
        'class' => 'kartik\grid\ActionColumn',
        'dropdown' => true,
        'vAlign'=>'middle',    
        'viewOptions'=>['title'=>'viewMsg', 'data-toggle'=>'tooltip'],
        'updateOptions'=>['title'=>'updateMsg', 'data-toggle'=>'tooltip'],
        'deleteOptions'=>['title'=>'deleteMsg', 'data-toggle'=>'tooltip'], 

     ],
     [
          'class' => '\kartik\grid\ExpandRowColumn',
          'header' => '',
               'value' => function ($model, $key, $index) { 
               return GridView::ROW_COLLAPSED;
          },
          'detailUrl' =>Url::to(['expenses/viewdetail']),
     ],

];



echo GridView::widget([
    'dataProvider'=> $dataProvider,
    'filterModel' => $searchModel,
    'columns' => $gridColumns,
    'autoXlFormat'=>true,
    'responsive'=>true,
    'hover'=>true,
    'condensed'=>true,
    'floatHeader'=>true,
    'bordered'=>true,
   'toolbar'=>['{export}',
                    '{toggleData}',],
   'showPageSummary'=>true,
   'panel'=>[
       'heading'=>'<h3 class="panel-title"><i class="glyphicon glyphicon-globe"></i> '. Html::encode($this->title).'</h3>',
    'type'=>'primary',
    'before'=>Html::a('<i class="glyphicon glyphicon-plus"></i>Create Expenses', ['create'], ['class' => 'btn btn-primary']),
    'showFooter'=>false

    ],
    'pjax'=>true,
    'export'=>[
        'fontAwesome'=>true,
        'showConfirmAlert'=>false,
        'target'=>GridView::TARGET_BLANK,

    ],


]);

?>

Upvotes: 2

Views: 5531

Answers (3)

On columns you my add attribute hiddenFromExport => true

For example:

'columns' => [
    [
        'attribute'        => 'inn',
        'format'           => 'text',
        'hiddenFromExport' => true,
    ],
],

Upvotes: 1

friek108
friek108

Reputation: 1174

It's best you pass a different array with the full grid columns rather than just the normal $gridColumns used on the web page. To keep it tidy, I have two functions in my $searchModel, one for grid columns and another for export columns. Then when setting your export menu, just call the function that returns your columns:

ExportMenu::widget([        
    'dataProvider' => $dataProvider,
    'columns' => $searchModel->getExportColumns(),
    ... 
]);

In your search model:

public function getGridColumns(){
    return [
        // page columns
    ];

public function getExportColumns(){
    return [
        // export columns
    ];

Upvotes: 0

Denis Bhojvani
Denis Bhojvani

Reputation: 794

You can do like this in your gird column list add all column and set 'hidden' => true property which you don't want to show in grid-view but this column comes in your csv when you export csv. suppose for example here i am showing you for one column you can implement for this thing all columns. check below example code.

 [

            'attribute' => 'Description',        
            'vAlign'=>'middle',
            'headerOptions'=>['class'=>'kv-sticky-column'],
            'contentOptions'=>['class'=>'kv-sticky-column'], 
            'hidden' => true,
            'format'=>'text',
        ],

now what happen description column will not display in gird view but it is present in exported file. i hope it is helpful for you.

Upvotes: 1

Related Questions