我正在使用绑定到OData模型的sap.m.Table。我设置了增长=“真实”和growScrollToLoad =“true”。这样,当用户向下滚动时,UI一次仅获取20行。我也在多选模式下使用该表,因此用户可以使用“全选”复选框选择一些(或所有行)。所有这一切都按预期工作。
我现在正在添加导出到Excel功能,我看到当用户选择“全选”复选框时,只选择客户端上的行。因此,例如,如果用户在获取数据后没有滚动,则即使后端有一百条记录,也只选择前20行。我的计划是从后端获取所有数据,如果选中“全选”,则将其导出到电子表格,如果不是只导出选定的行。问题是如何知道何时选中全部选项?我还没有找到一个API来提供这些信息。有没有更好的方法来实现这一目标?我很想听听你的想法。
感谢。
答案 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;
}