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.

0voto

avalori Punkte 427

Wie Kem feststellte, ist der "scrollToRight"-Effekt nach dem scrollIntoView störend. Meiner Meinung nach bietet Kems Lösung ein besseres Verhalten als die Basislösung, da normalerweise die ersten Spalten in einer Tabelle die aussagekräftigeren sind. Ich habe seinen Ansatz, der horizontal zur ersten Spalte der Zeile scrollt, die sichtbar sein soll, etwas verbessert, indem ich die erste sichtbare Spalte auf der linken Seite berechne, bevor ich den Scrollvorgang anwende, und dann zu ihr scrolle.

Ein letzter Hinweis: Spalten absolut links wird gegen "51" getestet. Dies ist ein Wert, den ich "experimentell" gefunden habe, indem ich die JS-Werte im Entwickler-Tool des Browsers nachgeschaut habe, ich denke, es hängt vom Stil der Tabelle ab, Sie müssen ihn möglicherweise ändern/berechnen.

Unterhalb des Codes:

public void scrollIntoView(T next) {
        int index = datagrid.getVisibleItems().indexOf(next);
        NodeList<TableCellElement> cells = datagrid.getRowElement(index).getCells();
        int firstVisibleIndex = -1;
        for(int i=0; i<cells.getLength() && firstVisibleIndex<0;i++)
            if(UIObject.isVisible(cells.getItem(i)) && (cells.getItem(i).getAbsoluteLeft() > 51) && (cells.getItem(i).getAbsoluteTop() > 0))
                firstVisibleIndex = i;

        cells.getItem(firstVisibleIndex>=0? firstVisibleIndex : 0).scrollIntoView();
}

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