7 Stimmen

GWT 2.4 DataGrid automatisches Blättern bei der Auswahl eines Elements

Ich verwende GWT 2.4's neue DataGrid in einem Projekt. Ich habe das DataGrid mit einer Seitengröße von 50 konfiguriert.
Der verfügbare Bildschirm ist nicht groß genug, um alle Elemente anzuzeigen, und daher wird eine vertikale Bildlaufleiste eingeblendet (dies ist eigentlich der Hauptzweck der Verwendung eines DataGrid).
Ich habe eine SingleSelectionModel zum DataGrid, um Elemente auswählen zu können.
Das funktioniert bisher gut.

Ich habe jedoch auch ein anderes Widget, mit dem der Benutzer interagieren kann. Basierend auf dieser Benutzeraktion wird ein Element aus dem DataGrid ausgewählt werden sollte.
Manchmal befindet sich das ausgewählte Element nicht im sichtbaren Bildschirmbereich und der Benutzer muss im DataGrid nach unten blättern, um es zu sehen.
Gibt es eine Möglichkeit, automatisch oder manuell nach unten zu blättern, so dass das ausgewählte Element sichtbar ist?
Ich habe die JavaDocs des DataGrid und fand keine geeignete Methode oder Funktion, um dies zu tun.

9voto

ocaner Punkte 161

Ich weiß nicht, ob das funktioniert, aber Sie könnten versuchen, das Zeilenelement für die Auswahl zu erhalten und die Methode scrollIntoView zu verwenden.

Beispiel-Code:

dataGrid.getRowElement(INDEX_OF_SELECTED_ITEM).scrollIntoView();

6voto

Kern Punkte 103

Die obige Antwort funktioniert ziemlich gut, aber wenn das Raster breiter als Ihr Fenster ist und eine horizontale Bildlaufleiste hat, scrollt es auch ganz nach rechts, was ziemlich nervig ist. Ich war in der Lage, um es nach unten scrollen und bleiben nach links gescrollt, indem Sie die erste Zelle in der ausgewählten Zeile und dann mit ihm scrollen, dass in Sicht.

dataGrid.getRowElement(dataGrid.getVisibleItems().indexOf(object)).getCells().getItem(0).scrollIntoView();

2voto

Steve J Punkte 2666

Ich habe keine Zeit, es auszuprobieren, aber DataGrid implementiert die Schnittstelle HasRows, und HasRows hat unter anderem eine Methode namens setVisibleRange. Sie müssen nur die Zeilennummer des Elements herausfinden, auf das Sie den Fokus legen möchten, und dann den sichtbaren Bereich von dieser Zahl n bis n+50 festlegen. Auf diese Weise wird das DataGrid so zurückgesetzt, dass das Element an der Spitze steht (oder nahe der Spitze, wenn es sich in den letzten 50 Elementen der Liste befindet, die das DataGrid unterstützt). Vergessen Sie nicht, Ihr DataGrid neu zu zeichnen.

Haben Sie sich das schon angesehen? Wenn ja, würde es mich wundern, wenn es nicht funktioniert.

Oh, und da es sich um ein Widget handelt, das mit einem anderen spricht, haben Sie wahrscheinlich einige Nachrichten eingerichtet und einige Nachrichten-Handler, so dass, wenn der Benutzer mit dem zweiten Widget interagiert und das Element "auswählt", die Nachricht auf dem EventBus ausgelöst wird und ein Handler für diese Nachricht das DataGrid entlang der von mir beschriebenen Linien repariert. Ich denke, Sie müssen diese Verdrahtung selbst tun.

1voto

jordiburgos Punkte 5303

Meine Lösung ist ein wenig besser:

dataGrid.getRow(model).scrollIntoView();

1voto

AndreasS Punkte 113

Ich habe eine "Out of Bounds"-Ausnahme bei der Durchführung des oben genannten Vorgangs erhalten.

Ich löste es immer das ScrollPanel in der DataGrid und verwendet .scrollToTop() und so weiter auf der ScrollPanel. Um jedoch auf das ScrollPanel im DataGrid zuzugreifen, musste ich diesen Kommentar verwenden: http://code.google.com/p/google-web-toolkit/issues/detail?id=6865

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X