2010-11-15 1 views
6

Multiselect in JQGrid consente solo selezioni multiple o selezioni singole e la funzionalità di spostamento non è quella che mi aspetto che la selezione del turno faccia. Inoltre, non mi piace il fatto che abbiamo bisogno di combobox con multiselect.JQGrid - Multiselect

Quale altra soluzione è possibile utilizzare per il multiselect?

+4

io non la penso così è davvero il posto per essere la visualizzazione delle vostre mercanzie. – wmitchell

+1

SO è un sito di QA ... non hai fatto una domanda ... Scrivi un blog. Io voto di chiudere –

+1

non provando ad essere m8 sembra buono penso che ci potrebbero essere posti migliori per metterlo. cioè nel sito del plugin Jquery. Sebbene sia bello vedere l'entusiasmo, non voglio che SO si trasformi in un mercato aperto. – wmitchell

risposta

26

[ott 2011] Aggiornato per utilizzare l'API 4.0, errori di selezione turno corretto, ciclo di selezione semplificato. Testato in 4.2.0.


Se, come me, avete bisogno di una selezione multipla corretta nel jqGrid - dove ctrl seleziona una singola riga alla volta, selezionare seleziona più righe e né annullare la selezione e seleziona 1 fila - Hai trovato.

prima cosa: impostate multiselect: true nella definizione della griglia (non ho messo tutte le altre opzioni MultiSelect)

successivo: In gridComplete: function() {} set grid.jqGrid('hideCol', 'cb'); - questa nasconde le caselle di controllo se non si desidera loro.

Infine: La parte principale

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

La Fine - La speranza che aiuta

+0

Grazie per la pubblicazione di questo, tuttavia sarebbe leggermente più utile se il codice fosse stato testato correttamente ... –

+1

Grazie, una nota: è necessario sostituire tutte le occorrenze di $ ('# griglia') con $ (questo). – brianray

+0

@Byron Cobb: ottima soluzione, +1 da parte mia. La selezione evidenzia anche il testo nella griglia. Come prevenire l'evidenziazione del testo? Come consentire di aggiungere/rimuovere selezionati da/alla selezione se si preme il tasto MAIUSC + SU/GIÙ. – Andrus