Selecionar todos los datos GridView

Que tal amigos

Lo que necesito es que en mi gridview tenga un checkbox le cual me permita selecionar todos los datos de mi gridview adicional a esto tener un boto el cual me permita actualizar los datos selecionados el boton deben permitir actulizar el estado de 0 a 1 (tengo un campo tipo boolean, utilizo Yii2

algo como esta extension pero adicionar el boton

http://selgridview.demopage.ru/

Saludos

Hola nan_do9 para tu petición usa ajax, para modificar los estado de 0 a 1 pero antes debemos de solucionar poner un checkbox en tu grid, fácil de esta forma:





//Dentro de columns en CGridView


array(

    'header'=>'TITULO DEL HEADER',

    'value' => 'CHtml::checkBox("Prueba[id]", $data->idPK, array("value"=>$data->id))',

    'htmlOptions'=>array() // aqui tomalo como las propiedades que puedes poner como html, css, class, style, width etc. etc.

),




Shaolin

Gracias por la ayuda pero me podrias decir como va en mi ejemplo yo utilizo yii2 y soy muy nuevo en el Framework




GridView::widget([

        'dataProvider' => $dataProvider,

        'filterModel' => $searchModel,

        'columns' => [

            ['class' => 'yii\grid\SerialColumn'],

            'codigo',

            'nombre',

            'estado',

          

            ['class' => 'yii\grid\ActionColumn'],

        ],

    ]); ?>




Te dejo otra manera de hacer un check box dentro de columns





$this->widget('zii.widgets.grid.CGridView',array(

        'id' => 'show-list',

        'dataProvider' => $model->search(),

 

        'columns'=> array(

            array(

                'name' => 'check',

                'id' => 'selectedIds',

                'value' => '$data->id',

                'class' => 'CCheckBoxColumn',

                'selectableRows' => '100',

 

            ),

         ),

    ));




Si gusta entender mas esto, te dejo los links donde se habla al respecto, tanto la manera de arriba como esta las puedes aplicar y puedes realizar lo que pretendes, recuerda que en value si hay un valor aparecerá checkeado sino aparecerá el check null, solo es como tu indiques tus validaciones.

Saludos.

LIGAS: http://www.yiiframework.com/wiki/781/checkbox-in-cgridview/

http://www.yiiframework.com/wiki/254/como-trasponer-una-lista-creada-con-chtml-checkboxlist/

Para yii2 es algo así:




GridView::widget([

        'dataProvider' => $dataProvider,

        'filterModel' => $searchModel,

        'columns' => [

            ['class' => 'yii\grid\SerialColumn'],

            [

                'class' => 'yii\grid\CheckboxColumn',

                // you may configure additional properties here

            ],

            'codigo',

            'nombre',

            'estado',

          

            ['class' => 'yii\grid\ActionColumn'],

        ],

    ]); ?>



Puedes verlo en la documentacion.

El ejemplo que muestras mantiene los resultados al pasar entre páginas añadiendo los id seleccionados al get, aquí tendrías que hacer algo similar. Si no lo haces solo se envían los id de los checkbox de la página que estas visualizando.

Un saludo

Hola rahif, sobre tu comentario no eh manejado yii2 pienso migrar el siguiente año, pero ya se quito la opción de poner las propiedades directas?, ejemplo en el código antes era de esta forma

ANTES




$this->widget('zii.widgets.grid.CGridView', array(

'id'=>'prueba'

'dataProvider' => $model->search(),

'columns' => [

   array(

      'name'=>'codigo'

      'value'=>'AQUI VA TODO LO QUE YO QUISIERA PONER, CHECK, DROPBOX, TEXTBOX, etc'

   )

));



AHORA ?




  GridView::widget([

    'dataProvider' => $dataProvider,

    'columns' => [

      ['class' => 'yii\grid\CheckboxColumn'],

      [

         'attribute' => 'foo',

         'format' => 'raw',

         'name' => 'codigo'

         'value' => 'Html::checkbox("Prueba[codigo]", $model->codigo, ["value" => $index, "disabled" => true])'

         },

      ],

    ],

 ]);



Esta sería la manera correcta?.

Saludos

Gracias por la ayuda

con todos sus comentarios e solucionado el problema de esta manera

en mi controlador




public function actionUpdateall(){

    

    $selection=(array)Yii::$app->request->post('selection');//typecasting

    foreach($selection as $codigo){

         $model=Usuario::findOne((int)$codigo);

        if($model->estado==0){

              

              $model->estado=1;

              $model->save();

    }

}



y en mi vista tengo lo siguiente




<?php ActiveForm::end(); ?>  

<?= Html::beginForm(['usuario/updateall'],'post');?>


<?= GridView::widget([

        'dataProvider' => $dataProvider,

        'filterModel' => $searchModel,

        'columns' => [

            ['class' => 'yii\grid\SerialColumn'],

            'codigo',

            'nombre',

            'estado',

          

            ['class' => 'yii\grid\ActionColumn'],

            ['class' => 'yii\grid\CheckboxColumn',


              'checkboxOptions' => function ($dataProvider, $key, $index, $column) {

                             return ['value' => $dataProvider->codigo];

                }

            ],


        ],

    ]); ?>


    <?=Html::submitButton('cambiar de estado', ['class' => 'btn btn-info',]);?>

<?= Html::endForm();?> 



Me funciona todo ok gracias por la ayuda

Se puede hacer de ambas formas:

1º- con la clase CheckboxColumn agregando los parámetros que necesites y si quieres cambiar algo en los checkbox en un closure como a hecho nan_do9.

2º - con format => ‘raw’ puedes poner lo que quieras, solo cambiar el value con un closure si operas con los datos.

Yii2 utiliza mucho los closures por lo demás aquí no cambia mucho respecto de yii1.