2010-11-15 15 views
6

Wielokrotny wybór w JQGrid umożliwia tylko wielokrotny wybór lub pojedyncze zaznaczenia, a funkcja przesunięcia nie jest tym, czego oczekiwałbym, wybierając opcję zmiany. Nie podoba mi się też, że potrzebujemy comboboxów z multiseleksem.JQGrid - Multiselect

Jakie inne rozwiązanie można zastosować do multiselect?

+4

I nie sądzę jest naprawdę miejsce wyświetlając swoje wyroby. – wmitchell

+1

SO to strona QA ... nie zadałeś pytania ... Napisz bloga. Głosuję, aby zamknąć –

+1

nie starając się być m8, wygląda dobrze, myślę, że mogą być lepsze miejsca do umieszczenia go. tj. na stronie dodatku Jquery. Choć dobrze jest widzieć entuzjazm, po prostu nie chcę, aby SO przekształciło się w rynek openair. – wmitchell

Odpowiedz

26

[paź 2011 r.] Zaktualizowano do wersji 4.0 API, poprawiono błędy selekcji zmian, uproszczoną pętlę wyboru. Testowane w wersji 4.2.0.


Jeśli tak jak ja, potrzebuje właściwego wielokrotny w jqGrid - gdzie ctrl wybiera jeden wiersz na raz, wybierz wybiera wiele wierszy i ani skasować wybór i wybiera 1 wiersz - Znalazłeś ją.

początek: set multiselect: true w definicji siatki (nie ustawiać żadnych innych opcji wielokrotny)

Następny: W gridComplete: function() {} ustawić grid.jqGrid('hideCol', 'cb'); - to ukrywa pola wyboru, jeśli nie chcesz im.

Wreszcie: Główną część

beforeSelectRow: function (rowid, e) { 
    if (!e.ctrlKey && !e.shiftKey) { 
     $("#grid").jqGrid('resetSelection'); 
    } 
    else if (e.shiftKey) { 
     var initialRowSelect = $("#grid").jqGrid('getGridParam', 'selrow'); 
     $("#grid").jqGrid('resetSelection'); 

     var CurrentSelectIndex = $("#grid").jqGrid('getInd', rowid); 
     var InitialSelectIndex = $("#grid").jqGrid('getInd', initialRowSelect); 
     var startID = ""; 
     var endID = ""; 
     if (CurrentSelectIndex > InitialSelectIndex) { 
      startID = initialRowSelect; 
      endID = rowid; 
     } 
     else { 
      startID = rowid; 
      endID = initialRowSelect; 
     } 

     var shouldSelectRow = false; 
     $.each($("#grid").getDataIDs(), function(_, id){ 
      if ((shouldSelectRow = id == startID || shouldSelectRow)){ 
       $("#grid").jqGrid('setSelection', id, false); 
      } 
      return id != endID;       
     }); 
    } 
    return true; 
} 

Koniec - nadzieję, że pomoże

+0

Dzięki za umieszczenie tego, jednak byłoby trochę bardziej przydatne, jeśli kod został poprawnie przetestowany ... –

+1

Dzięki, Jedna uwaga: należy zastąpić wszystkie wystąpienia $ ('# grid') za pomocą $ (this). – brianray

+0

@Byron Cobb: Doskonałe rozwiązanie, +1 ode mnie. Zaznaczenie również podświetla tekst w siatce. Jak zapobiegać podświetlaniu tekstu? Jak zezwolić na dodawanie/usuwanie zaznaczonych pozycji do/z zaznaczenia, jeśli naciśnięty zostanie klawisz shift + strzałka w górę/w dół. – Andrus