2015-10-18 14 views
7

mi vuole sapere se c'è qualche possibilità insito in yii2 colonna casella di controllo GridView per selezionare/deselezionare tutte le righe in una volta ..Seleziona tutti record di tutte le pagine nella colonna casella di yii2 GridView

Per esempio se ho 500 registra in una griglia e sto visualizzando 100 record in una volta che posso selezionare solo 100 record in una sola volta e fare qualsiasi azione collettiva.

voglio utente sia in grado di selezionare tutti i 500 record in una volta e fare qualsiasi azione di massa a quelli registrati alla volta .. spero che tutto ottiene la mia domanda

ho fatto un suggerimento per Yii proprietari quadro sulla github e hanno confermato che faranno questo miglioramento abbastanza presto e mettere questo tema nella sezione valorizzazione, in modo sperando che includeranno abbastanza presto ma fino ad allora mi guida per raggiungere questo obiettivo in alcun modo alternato

Grazie

risposta

2

Sì, è possibile utilizzare CheckBoxColumn. Basta aggiungere le seguenti linee nel vostro colonne serie GridView s':

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

Come Yii2's documento ufficiale:

CheckboxColumn visualizza una colonna di checkboxes in una visualizzazione a griglia. Per aggiungere un CheckboxColumn al yii\grid\GridView, aggiungerlo alla configurazione colonne come segue:

'columns' => [ 
// ... 
    [ 
     'class' => 'yii\grid\CheckboxColumn', 
     // you may configure additional properties here 
    ], 
] 

Gli utenti possono fare clic sul checkboxes per selezionare le righe della griglia. Le righe selezionate possono essere ottenute chiamando il JavaScript seguente codice:

var keys = $('#grid').yiiGridView('getSelectedRows'); 
// keys is an array consisting of the keys associated with the selected rows 
+0

l'ho già implementato .. ma il mio problema è leggermente diverso .. Considera che ho 500 record nella griglia .. e sto visualizzando solo 100 righe per pagina .. E se devo selezionare tutte le 500 righe a una volta e fare l'azione comune per tutte le 500 righe di quanto non posso farlo dalla prima pagina ... Spero che tu ottenga il mio punto –

+0

@MikeRoss Si prega di controllare questa risposta https://stackoverflow.com/a/30066826/ 959939 – SenG

0

Si deve "salvare" gli elementi della griglia selezionati su ogni impaginazione facendo una richiesta POST quando si utilizza l'impaginazione (serializzare il modulo e fare una richiesta Ajax). Quindi usa gli ID inviati per avere una parte di pre-selezione sulla tua pagina.

In questa parte di pre-selezione rendere alcune caselle di controllo (gruppo di caselle di controllo) alla pagina con gli ID preselezionati che non si trovano nella pagina della griglia corrente e un semplice testo per indicare quale elemento è (nome ecc.).

Quindi nella pagina della griglia corrente selezioni gli elementi con le caselle di controllo della griglia e quando impaginate le caselle di controllo "selezionate" vengono visualizzate in questa parte di preselezione.

Con questo è possibile selezionare gli elementi su più pagine e anche deselezionare elementi che non sono nella pagina.

Sulla tua "azione", devi solo combinare entrambi i gruppi di caselle per ottenere tutti gli elementi selezionati.

c'è qualcosa di simile per yii1 menzionato here

c'è anche un'estensione yii1 che fa questo here forse si replicherà il codice in yii2 o trovare qualche simile estensione.

0

Per impostazione predefinita, non è possibile (ancora). Ma puoi salvare le chiavi per dopo. Ecco l'idea di base, spero che ti dia un inizio.

<script type="text/javascript"> 
$(document).ready(function(){ 
    var selectedItems = []; 

    $('#delete_selected_items_btn').click(function(){ 
     selectedItems = selectedItems.concat($('.grid-view').yiiGridView('getSelectedRows')); 
     // select all rows on page 1, go to page 2 and select all rows. 
     // All rows on page 1 and 2 will be selected. 
     console.log(selectedItems); 
    }) 
}) 
</script> 

La mia ipotesi è che si stia utilizzando Pjax per il gridview.

+0

grazie per aver risposto ma per ora ho creato un'azione extra che accetta 'eventid' e trovo tutte le chiavi per quell'evento e le invio da un'azione separata. –

Problemi correlati