如何从表中删除SelectAllCheckbox?

时间:2018-07-13 11:25:00

标签: sapui5

我要删除使所有字段从表(sap.m.table)中选择的复选框。

我尝试过:

var oTable = this.byId('MyTableId');
oTable._getSelectAllCheckbox().setVisible(false);

这对我不起作用。有没有办法在XML中将其设置为false? 我知道我可以使用CSS,但是只有在没有其他解决方案的情况下,我才想使用CSS。

2 个答案:

答案 0 :(得分:1)

sap.m.Table

(又名响应表

当前,尚无公开记录的API来启用/禁用显示sap.m.Table上的“全选” -CheckBox。在这种情况下,最佳实践是扩展控件并相应地切换bPreventMassSelection状态。

以下是示例中的摘录:https://embed.plnkr.co/pnpdRK7d7CxZXZ8s

sap.ui.define([
  "sap/m/Table",
  "sap/m/TableRenderer",
], function(Table, TableRenderer) {
  "use strict";

  return Table.extend("demo.control.MyResponsiveTable", {
    metadata: {
      properties: {
        showSelectAll: {
          type: "boolean",
          bindable: true,
        },
      },
    },

    setShowSelectAll: function(bValue) {
      this.bPreventMassSelection = !bValue;
      this.setProperty("showSelectAll", bValue);
      return this;
    },

    renderer: TableRenderer,
  });
});
<demo:MyResponsiveTable xmlns:demo="demo.control"
  showSelectAll="{/showSelectAll}"
  mode="MultiSelect">

_getSelectAllCheckbox相比,应优先采用上述方法,因为:

  • _getSelectAllCheckbox私有方法
    • 不得在控件定义之外使用私有方法。
    • 依靠私有方法和/或操纵内部控件(CheckBox在将来的UI5版本中破坏该应用。
  • 另一方面,bPreventMassSelection是一个简单的标志,已在内部依赖于sap.m.Table / .List的其他控件中广泛使用。我们可以看到,如果启用了bPreventMassSelection,则Table会跳过呈现“全选”复选框的显示。

sap.ui.table.Table

(又名网格表

如果有人在寻找解决方案但使用sap.ui.table.Table,请将enableSelectAll属性设置为false

<table:Table xmlns:table="sap.ui.table"
  enableSelectAll="false"
  selectionMode="MultiToggle">

答案 1 :(得分:0)

oTable._getSelectAllCheckbox().setVisible(false);按我的预期工作。 我将其添加如下:

this._myDelegate = {
    onAfterRendering: function () {
        if (typeof this._getSelectAllCheckbox === "function" && this._getSelectAllCheckbox().isA("sap.m.CheckBox")) {
            this._getSelectAllCheckbox().setVisible(false);
        }
    }
};
oTable.addEventDelegate(this._myDelegate, oTable);
// Remove this._myDelegate from the table in `onExit` to avoid memory leak

确保您在var oTable = this.byId("MyTableId");上具有正确的表控件。