我如何知道用户何时选择了sap.m.Table中的所有行

时间:2017-01-12 21:35:45

标签: sapui5

我正在使用绑定到OData模型的sap.m.Table。我设置了增长=“真实”和growScrollToLoad =“true”。这样,当用户向下滚动时,UI一次仅获取20行。我也在多选模式下使用该表,因此用户可以使用“全选”复选框选择一些(或所有行)。所有这一切都按预期工作。

我现在正在添加导出到Excel功能,我看到当用户选择“全选”复选框时,只选择客户端上的行。因此,例如,如果用户在获取数据后没有滚动,则即使后端有一百条记录,也只选择前20行。我的计划是从后端获取所有数据,如果选中“全选”,则将其导出到电子表格,如果不是只导出选定的行。问题是如何知道何时选中全部选项?我还没有找到一个API来提供这些信息。有没有更好的方法来实现这一目标?我很想听听你的想法。

感谢。

3 个答案:

答案 0 :(得分: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:

很抱歉,我现在看到你正在使用Check Box,所以在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中起作用。

答案 1 :(得分: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事件,您可以使用该事件来确定是否已从后端检索到所有行。

答案 2 :(得分:0)

您可以在表上添加选择事件侦听器: <Table selectionChange=".onSelectionChange">

如果选中标题复选框,则参数selectAll将为true,否则为undefined。

onSelectionChanged: function(event) {
    var selectAll = event.getParamerter("selectAll") === true;
}
相关问题