2015-10-18 35 views
7

ja chce wiedzieć, czy istnieje opcja wbudowana w yii2 kolumnie GridView pole wyboru, aby zaznaczyć/odznaczyć wszystkie wiersze naraz ..Zaznacz cały rejestr wszystkich stronie w kolumnie pole wyboru gridview yii2

Na przykład jeśli mam 500 rekordy w widoku siatki i wyświetlam 100 rekordów jednocześnie, ponieważ mogę wybrać tylko 100 rekordów jednocześnie i wykonać dowolną masową akcję.

chcę użytkownika, aby być w stanie wybrać wszystkie 500 rekordów na raz i zrobić żadnych działań luzem z tymi rekordu naraz .. nadzieję, że wszyscy się moje pytanie

zrobiłem sugestię Yii właścicieli i ramowe na github oni potwierdzili, że będą robić to akcesorium wystarczająco szybko i umieścić tę kwestię w dziale akcesoriów, więc nadzieję, że będą one obejmować go na tyle szybko, ale do tego czasu prowadzi mnie do osiągnięcia tego celu w jakikolwiek alternatywny sposób

Dziękuję

Odpowiedz

2

Tak, możesz użyć CheckBoxColumn. Wystarczy dodać następujące wiersze w kolumnach tablicy GridView „s:

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

Jak Yii2's Oficjalny dokument:

CheckboxColumn wyświetla kolumnie checkboxes w widoku siatki. Aby dodać CheckboxColumn do yii\grid\GridView, dodaj ją do konfiguracji kolumn w następujący sposób:

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

Użytkownicy mogą kliknąć na checkboxes wybrać rzędy siatki. Wybrane wiersze można uzyskać dzwoniąc pod podany kod JavaScript:

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

Zaimplementowałam już to .. ale mój problem jest trochę inny .. Rozważ, że mam 500 rekordów w siatce .. i wyświetlam tylko 100 wierszy na stronie .. I jeśli muszę wybrać wszystkie 500 wierszy w raz i wykonaj wspólną akcję dla wszystkich 500 wierszy niż nie mogę tego zrobić z pierwszej strony ... Mam nadzieję, że dostaniesz mój punkt –

+0

@MikeRoss Proszę, sprawdź tę odpowiedź https://stackoverflow.com/a/30066826/ 959939 – SenG

0

trzeba „ratować” wybrane elementy siatki na każdej paginacji wykonując żądania POST, gdy jest używany paginacja (serializacji formularz i robi żądanie ajax). Następnie użyj przesłanych identyfikatorów, aby mieć część preselekcji na swojej stronie.

W tej selekcji wstępnej zaznacz pola wyboru (grupę pól wyboru) na stronie z wybranymi identyfikatorami, które nie znajdują się na aktualnej stronie siatki i prostym tekstem wskazującym, który element jest (nazwa itp.).

Tak więc na twojej aktualnej stronie siatki wybierasz elementy z polami w siatce, a podczas dzielenia na strony tych "zaznaczonych" pól wyboru są renderowane w tej selekcji wstępnej.

Dzięki temu można wybierać elementy na wielu stronach i można również odznaczyć pozycje, których nie ma na stronie.

W przypadku "działania" wystarczy połączyć obie grupy pól wyboru, aby uzyskać wszystkie wybrane elementy.

istnieje coś podobnego do yii1 wspomniano here

jest też przedłużenie yii1 który robi to here może będzie replikować kod w yii2 lub znaleźć jakiś podobny rozszerzenie.

0

Domyślnie nie jest to możliwe (jeszcze). Ale możesz zapisać klucze na później. Oto podstawowy pomysł, mam nadzieję, że da ci to początek.

<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> 

Moje założenie jest takie, że używasz Pjax do wyświetlania siatki.

+0

dziękuję za odpowiedź, ale na razie stworzyłem dodatkową akcję, która akceptuje 'eventid' i znajduję wszystkie klucze dla tego wydarzenia i wysyłam je z osobnej akcji. –