wie man eine erste td in eine tr dauern kann

8

Ich habe ein jqgrid, beim Setzen von multicheck bekomme ich das Kontrollkästchen in der ersten Spalte, ich möchte, dass diese Checkbox-Spalte die letzte Spalte ist.

Ich habe keine Option gefunden, also schreibe ich eine benutzerdefinierte jquery-Methode, um die erste td von tr auf die letzte zu verschieben.

Ich versuche es mit

%Vor%

Bitte helfen Sie.

    
Praveen Yenumula 21.10.2011, 13:04
quelle

2 Antworten

5

Irgendein Grund, warum das so komplex ist? Dies sollte es tun:

%Vor%

Live-Beispiel: Ссылка

    
Jamiec 21.10.2011 13:10
quelle
5

Ich finde Sie interessant, aber die Antwort ist nicht so einfach. Das Problem ist, dass jqGrid an einigen Stellen den Index der Spalte colModel verwendet, um den Spaltenwert zu finden. Wenn Sie also <td> -Elemente innerhalb jeder Zeile des Rasters verschieben, wird die korrekte Information im Raster angezeigt, aber das Raster ist nicht editierbar . Kein Bearbeitungsmodus funktioniert mit dem Raster.

Nächstes Problem. In Ihrem Beispiel haben Sie 'td:first' verwendet, um die Zelle mit der Checkbox zu erhalten. Bei Verwendung der Option rownumbers: true wird es falsch sein. In dem Fall wird das Kontrollkästchen in der zweiten und nicht der ersten Spalte sein.

Der beste Weg, die Spalten zusammen mit colModel neu anzuordnen, ist die Verwendung von remapColumns methode wie

%Vor%

Sieht man sich die Demo an, mit der man sieht, dass alles korrekt ist Das erste Mal, aber nach dem Ändern der Seite, Sortieren einer Spalte oder einer anderen Aktualisierung des Rasters wird das Raster falsch gefüllt. Der Grund für das Problem ist, dass der aktuelle Code von jqGrid nur funktioniert, wenn die Spalte mit den Multiselect-Ankreuzfeldern aus den ersten Rasterspalten besteht. Sehen Sie sich das Codefragment an, zum Beispiel:

%Vor%

Die Verwendung von gi+si+ni im Index von colModel array wird nach der Neuanordnung von colModel nicht funktionieren. Innerhalb von addXmlData , addJSONData , addRowData von grid.base.js gibt es weitere Code-Stellen. Um die Multiselect-Checkboxen voll unterstützen zu können, müssen also alle Funktionen verändert werden.

Wenn Sie nur die Daten im Grid anzeigen möchten, ohne sie zu bearbeiten , kann ich Ihnen eine Lösung vorschlagen, die gut aussieht. Siehe die Demo . Vor dem Posten eines Codes erkläre ich Ihnen, was im Code getan werden sollte.

Der Gitterkörper hat immer eine versteckte Zeile ( tr.jqgfirstrow ), die zur Einstellung der Spaltenbreite verwendet wird. Man sollte die Reihenfolge in den Spalten in der Zeile einmal ändern . Außerdem muss man die Reihenfolge der Spalten in den Spaltenüberschriften ändern (einschließlich der Suchleiste ) wenn es existiert) und die Fußzeile (Zusammenfassung) falls vorhanden.

Alle anderen Zeilen des Gitterkörpers sollten bei jeder Aktualisierung des Rasters aufgezeichnet werden . Also sollte man dies innerhalb von loadComplete oder gridComplete Event-Handler tun. Die Funktion getColumnIndexByName

%Vor%

kann verwendet werden, um den Index der Spalte 'cb' mit den Kontrollkästchen zu erhalten.

Um die Spalte innerhalb der Tabelle zu verschieben, habe ich die folgende Funktion verwendet

%Vor%

, das entweder alle Spalten aller Zeilen der Tabelle oder nur die Zeilen mit einer bestimmten Klasse verschieben kann. Die Zeile mit der Klasse "jqgfirstrow" sollte einmal verschoben werden und andere Zeilen mit der Klasse "jqgrow" sollten bei jeder Aktualisierung des Gitters verschoben werden. Also wird der vollständige Code von der Demo sein

%Vor%

Im Code verwende ich einige andere Klassen und interne Gitterstrukturen, wie zum Beispiel hier . Eine weitere Antwort kann weitere Informationen liefern .

    
Oleg 22.10.2011 14:58
quelle

Tags und Links