jqGrid: Alle Zeilen, die in "inline-Bearbeiten-Modus" standardmäßig
Habe ich ein jqGrid, wo eine Zeile ist editierbar auf klicken Sie auf (D. H. 'editRow' innen 'OnSelectRow' gut funktioniert). Aber meine Anforderung ist auf "laden Sie die raster mit ALLEN ZEILEN IM EDIT-MODUS durch Standard - (Inline-edit)", so sollte es keine Notwendigkeit für mich, klicken Sie auf die einzelnen Zeilen. Kann jemand werfen einige Lichter auf?
Habe ich versucht den code unten aber nicht Arbeit
var data_val = myGrid.getRowData();
for (var i=0;i<data_val.length;i++)
{
myGrid.editRow(data_val[i], true);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zum auflisten aller Zeilen von Netz und rufen
editRow
für jede Zeile. Der code kann wie folgtoder die folgenden
hasClass
Funktion:$(row).hasClass('jqgrow');
statt der ausführlichen und unzuverlässiginArray
Funktion:$.inArray('jqgrow', row.className.split(' ')) >= 0
. Sie können nie wissen, die Größe der weißen Flächen (' '
).$.hasClass
und auflistenthis.rows
mit Bezug auf$.each
. Sie wird kleiner code, aber die Leistung der code was ich geschrieben besser ist. Übrigens können Sie sehen, dass ich sparenrows.length
iml
variable und vergleicheni
mitl
in der Schleife anstelle der Verwendungi < rows.length
. Alle Schritte sind nur wegen der besseren performance. Wenn der performance-Aspekt ist nicht so wichtig für Sie, die Sie verwenden können$.hasClass
und$.each
statt. Noch eine Bemerkung: wenn du die Gitter ohne subgrids und gruppieren Sie können entfernen$.inArray
test und starten Sie miti=1
.editRow
Methode wird davon ausgegangen, dass der Benutzer die Bearbeitung der Zeile, auf die verwiesen, so ist es brav scrollt die Zeile in der Ansicht, aber in diesem Fall bewirkt es eine unerwünschte Wirkung. Bei der Ausführung als-ist, keine festen-Höhe raster enthält mehr Zeilen, als die Höhe unterstützt wird, Blättern Sie zu der unten in der Liste. Einfach die Umkehrung der Reihenfolge der for-Schleife hilft, um die ursprüngliche Ansicht Gitter mehr wie die Standard-Verhalten:for (i = l; i > -1; i--) {
.for (i = l; i > -1; i--) {
), aber ich empfehle, nicht zu viele Zeilen im Bearbeiten-Modus zur gleichen Zeit. Schaffen es viele benachteiligte in jqGrid und kann Folgen, dass Benutzer Sache, dass die Zeile geändert, aber es ist nicht so. Wenn man das scrollen dann vllt die Funktion im falschen Fall.editRow
innerhalb vononSelectRow
. Die callback -onSelectRow
haben den zweiten parameter an, die für diestatus
von der Auswahl. So können Sie unterscheiden, auswählen von deaktivieren im Falle der Nutzungmultiselect: true
. Wenn Sie mit local "Bearbeiten" dann können Sie brauchen, um geänderten Zeilen. Sie sollten zuerst speichern Sie die Daten durch aufrufensaveRow
alle Bearbeitungen in Zeilen und verwenden Sie dann$("#grid").jqGrid("getGridParam", "data")
um alle lokalen Daten. Sie können das senden der Daten an den server pro Handbuch$.ajax
Anfrage.saveRow
das Problem gelöst. Aber inmultiselect
Modus werden nur die zuletzt angeklickten Zeile wird in den Editier-Modus. Das heißt in dem Fall, dass wird aufgerufen, wenn eine Zeile ausgewählt istmultiselect
- Modus.for(var i = 0; i < rowIds.length; i++) { var rowId = rowIds[i]; grid.jqGrid('editRow', rowId, true); }
. Aber das funktioniert nicht, genau so, wie ich will, dass es funktioniert. Ich möchte, dass alle ausgewählten Zeilen werden im edit-Modus, d.h. der bearbeitbaren text-Boxen sollte im Bearbeiten-Modus für die ausgewählten Zeilen.$(this).find("input").removeAttr("disabled");
Die one-liner ist fast 2 Größenordnungen schneller auf meinem Rechner.formatter: "checkbox"
ohne Angabe vonformatoptions: {disabled: false}
?