2010-11-15 26 views
6

Mehrfachauswahl in JQGrid ermöglicht nur Mehrfachauswahl oder einzelne Auswahlen und die Schichtfunktionalität ist nicht das, was ich von der Schicht auswählen würde. Ich mag auch nicht, dass wir Comboboxen mit Multiselect brauchen.JQGrid - Multiselect

Welche andere Lösung könnte ich für Multiselect verwenden?

+4

Ich denke, SO nicht hilft, ist wirklich der Ort, um Ihre Waren zu sein, anzuzeigen. – wmitchell

+1

SO ist eine QA-Site ... Sie haben keine Frage gestellt ... Schreiben Sie einen Blog. Ich stimme zu schließen –

+1

nicht versuchen, M8 zu sein es sieht gut aus ich denke, dass es bessere Orte sein könnte, um es zu setzen. zB auf der Jquery Plugin Seite. Während es gut ist, Begeisterung zu sehen, möchte ich nicht, dass SO zu einem Openair-Markt wird. – wmitchell

Antwort

26

[Okt 2011] Aktualisiert, um 4.0 API zu verwenden, korrigierte Schichtauswahlfehler, vereinfachte Auswahlschleife. Getestet in 4.2.0.


Wenn Sie wie ich, Sie eine richtige Mehrfachauswahl in der jqGrid benötigt - wo Abfrage zu einem Zeitpunkt eine einzelne Zeile wählt, wählen Sie wählt mehrere Zeilen und weder die Auswahl löschen und wählt 1 Zeile - Sie haben es gefunden.

Das Wichtigste zuerst: set multiselect: true im Raster Definition

Next (I alle anderen Optionen Mehrfachauswahl nicht festgelegt haben): In gridComplete: function() {} gesetzt grid.jqGrid('hideCol', 'cb'); - das verbirgt sich die Kontrollkästchen, wenn Sie nicht wollen, Sie.

Schließlich: Der Hauptteil

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

Ende - Hoffnung, die

+0

Danke für das Posten, aber es wäre etwas nützlicher, wenn der Code richtig getestet wurde ... –

+1

Danke, eine Anmerkung: Sie sollten alle Vorkommen von $ ('# grid') durch $ (this) ersetzen. – brianray

+0

@Byron Cobb: Ausgezeichnete Lösung, +1 von mir. Die Auswahl hebt auch den Text im Raster hervor. Wie verhindert man Textmarkierungen? Wie kann ich hinzufügen/entfernen ausgewählt von zu/von Auswahl, wenn Shift + auf/ab Pfeiltaste gedrückt wird. – Andrus