2017-01-12 25 views
1

我正在使用綁定到OData模型的sap.m.Table。我已經設置越來越多=「真」和growingScrollToLoad =「真」。這樣用戶界面一次只能抓取20行,因爲用戶向下滾動。我也在多選模式下使用表格,因此用戶可以使用「全選」複選框選擇一些(或全部行)。所有這些都按預期工作。我如何知道用戶何時選擇了sap.m.中的所有行?表

我現在將導出添加到Excel功能,並且我看到當用戶選擇「全選」複選框時,僅選擇客戶端上的行。因此,例如,如果用戶在獲取數據後不滾動,則即使在後端有一百條記錄,也只會選擇前20行。我的計劃是從後端獲取所有數據並將其導出到電子表格中,如果選中「全選」,則不是隻導出選定的行。問題是我怎麼知道選擇全部選中的時候?我還沒有找到一個給我這個信息的API。有沒有更好的方法來實現這一點?我很想聽聽你的想法。

感謝。

回答

0

您可以在XML定義組合框:

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

您可以在控制寄存器組合框事件處理程序:

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

並在控制器處理事件:

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

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

我希望這是你正在尋找,如果不是隨意問。

EDITED 10:10 130117:

對不起,現在我看你使用複選框,這樣在XML:

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

而且在功能下保存數據使用複選框方法getSelected

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

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

EDITED 10:14 130117:

Here是jsbin中的工作示例。

+0

非常感謝,但我想使用表格的開箱即用多選功能,而不是建立一些自定義的東西。在多選模式下創建表格時,默認添加全選按鈕。我想知道該按鈕何時被選中。 –

+0

好吧,我明白了,現在你知道該怎麼做了嗎? – Jaro

0

表中的selectionChange事件具有listItems參數。如果長度大於1,則按下全選按鈕。要確定是否選中或取消選擇所有行,可以檢查相同事件的參數selected

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 
    } 
} 

您還可以檢查選定項目的數量與表格中項目的數量。 oTable.getItems().length將指示表中當前有多少物品。比較表格中的項目數量與所選項目的數量,會告訴您是否全部選中。

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

爲了進一步驗證,您可以使用OData服務的$count功能找到在後端的項目總數,然後比較,以你的表數據。

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

該表還具有growingFinished事件中,你可以用它來確定是否所有行已經從後端或者不能檢索。

相關問題