2017-01-12 2 views
1

Ich verwende eine sap.m.Table, die an ein OData-Modell gebunden ist. Ich habe growing = "true" und growingScrollToLoad = "true" gesetzt. Auf diese Weise ruft die Benutzeroberfläche nur 20 Zeilen gleichzeitig ab, wenn der Benutzer nach unten scrollt. Ich verwende die Tabelle auch im Mehrfachauswahlmodus, so dass der Benutzer einige (oder alle Zeilen) mit der Checkbox "Alle auswählen" auswählen kann. All dies funktioniert wie erwartet.Woher weiß ich, wenn der Benutzer alle Zeilen in einer sap.m.Table ausgewählt hat

Ich füge jetzt einen Export nach Excel-Funktionalität, und ich sehe, dass, wenn der Benutzer das Kontrollkästchen "Alle auswählen", nur die Zeilen, die auf dem Client sind ausgewählt sind. Wenn beispielsweise der Benutzer nicht scrollt, nachdem die Daten abgerufen wurden, werden nur die ersten 20 Zeilen ausgewählt, selbst wenn im Back-End hundert Datensätze vorhanden sind. Mein Plan ist, alle Daten aus dem Backend zu bekommen und es in eine Tabelle zu exportieren, wenn die Option "Alles auswählen" aktiviert ist, wenn nicht nur die ausgewählten Zeilen exportiert werden. Frage ist, woher weiß ich, wenn die Auswahl alles aktiviert ist? Ich habe keine API gefunden, die mir diese Informationen liefert. Gibt es einen besseren Weg, dies zu erreichen? Ich würde gerne deine Gedanken hören.

Danke.

Antwort

0

Sie Combobox in der XML definieren:

<ComboBox id="comboBoxSelectAll"> 
    <core:Item id="sellectAll" text="Select all" key="All" /> 
    <core:Item id="sellectNotAll" text="Select not all" key="notAll" />       
</ComboBox> 

Sie Kombinationsfeld Ereignisbehandlungsroutine in der Steuerung registrieren:

var comboBoxSelectAll = this.getView().byId("comboBoxSelectAll"); 
comboBoxPerc.attachSelectionChange(this.comboBoxSelectAllchanged, this); 

Und Ereignis in der Steuerung handhaben:

comboBoxSelectAllchanged: function(oEvent){ 
    var key = oEvent.getParameters().selectedItem.getKey(); 

    if (key === "selectAll"){ 
     //save all data 
    } 
    else{ 
     //save just loaded data 
    } 
} 

Ich hoffe, das ist was du suchst, wenn du nicht fragst.

EDITED 10.10 130117:

Leider jetzt sehe ich Sie verwenden Check Box, so in der xml:

<VBox> 
    <CheckBox id="checkBoxAll" text="Select all"/>  
</VBox> 

Und in der Funktion, wo Sie Daten speichern Sie prüfen verwenden Box Methode getSelected :

var oCheckBoxAll = this.getView().byId("checkBoxAll");  
var bIsSelected = oCheckBoxAll.getSelected();  

if(bIsSelected === true){ 
    //save all data 
} 

EDITED 10.14 130117:

Here ist ein funktionierendes Beispiel in jsbin.

+0

Vielen Dank, aber ich wollte die Out-of-the-Box-Multi-Auswahl-Funktion der Tabelle verwenden, nicht etwas Brauchbares aufzubauen. Die Schaltfläche Alle auswählen wird standardmäßig hinzugefügt, wenn die Tabelle im Mehrfachauswahlmodus erstellt wird. Ich wollte wissen, wann diese Schaltfläche ausgewählt wurde. –

+0

Ok, ich verstehe, und weißt du jetzt, wie das geht? – Jaro

0

Das von der Tabelle ausgelöste Ereignis selectionChange hat einen listItems Parameter. Wenn die Länge mehr als 1 beträgt, wurde die Schaltfläche Alle auswählen gedrückt. Um festzustellen, ob alle Zeilen ausgewählt oder abgewählt wurden, können Sie den Parameter selected desselben Ereignisses überprüfen.

onSelectionChanged: function(oEvent) { 
    //this will return true if more than 1 item was selected 
    var bSelectAll = oEvent.getParameter("listItems").length > 1 
    //this will return true if the rows were selected, false if they were deselected 
    var bSelected = oEvent.getParameter("selected"); 
    if (bSelectAll && bSelected) { 
     //make a call to the backend to get all data 
    } 
} 

Sie können auch die Anzahl der ausgewählten Elemente vs die Anzahl der Elemente in der Tabelle überprüfen. oTable.getItems().length zeigt an, wie viele Elemente sich derzeit in der Tabelle befinden. Vergleichen Sie die Anzahl der Elemente in der Tabelle mit der Anzahl der ausgewählten Elemente, um festzustellen, ob alle ausgewählt sind.

var bAll = oTable.getSelectedItems().length === oTable.getItems().length; 

Für weitere Validierung können Sie die $count Funktion Ihres OData-Dienst verwenden, um die Gesamtzahl der Elemente im Backend zu finden, und dann diese Daten mit Ihrer Tabelle vergleichen.

var total; 
oModel.read("/EntitySet/$count", { 
    success: function(response) { 
     total = response; 
    } 
} 

Die Tabelle hat auch ein growingFinished Ereignis, das Sie bestimmen können, wenn alle Zeilen aus dem Backend oder nicht abgerufen wurden.

Verwandte Themen