【问题标题】:Get table row count in SAPUI5在 SAPUI5 中获取表行数
【发布时间】:2014-12-10 20:00:49
【问题描述】:

我有一个显示记录列表的sap.ui.Table。我想获取数据中记录的计数。

我已阅读帖子 SAP UI 5 how to print total table row ,但对我没有帮助。

这是表格的代码(列的代码已被删除以使帖子更小):

  <table:Table id="PickRecs" visibleRowCount="10" selectionMode="MultiToggle" visible="true" rows="{/downRecs}" >
    <table:title>
        <txt:Text text="{
      path: '/downRecs',
      formatter: 'Formatter.totalFormatter'
    }">
        </txt:Text>
        <Label text="possible records to export"></Label>

    </table:title>
    <table:columns>
      .......
    </table:columns>
 </table:Table>

这是formatter.js:

totalFormatter:function(results) {

    return results.length;
 }

我想使用数组downRecs 作为所有记录的源来显示表中有多少行。例如:3 条可能要导出的记录。

此值可以根据屏幕上的某些输入字段而改变,例如他们可以选择查看产品的所有记录或仅查看某个客户的记录等。

如何获取此更新后的记录数?该值显示在表格的工具栏或标题上。

【问题讨论】:

    标签: sapui5


    【解决方案1】:

    绑定长度不是您可以绑定的属性。此外,在参考链接上写的内容也不正确,因为您无法为属性初始化 ListBinding,ListBinding 需要模板或工厂以及多个聚合基数。

    要了解记录的更新计数,您应该附加到绑定的更改事件。

    var oBinding = oTable.getBinding("rows"); 
    oBinding.attachChange(function(sReason) {
        oYourTextField.setText(oBinding.getLength());
    });
    

    查看 jsbin 并按下过滤菜单的列标题

    http://jsbin.com/kohozenina/1/edit?html,output

    我们知道这有点麻烦,我们正在开发一个 ControlModel,您可以绑定一些触发更改事件的内容,例如绑定长度或所选项目的数量。

    【讨论】:

    • 试过你的例子。当我 console.log(oBinding) (在 getBinding 调用之后),它显示为“未定义”。如果我查看我的表 (oTable) 并查看,它会将绑定显示为我的 JSON 数组 ('/downRecs')。我添加了您显示的三行,但由于 oBinding 表示未定义,我收到 attachChange 错误。我错过了什么吗?
    • 我终于让它工作了....我不得不将代码放在与 JSON 调用相同的区域。谢谢。
    【解决方案2】:

    您是否尝试过绑定到{/downRecs/length}?这适用于大多数类型的模型。

    此外,添加到表格时,请确保添加到模型而不是表格本身。如果你这样做了,数据绑定应该会处理剩下的事情。

    应该是这样的:

    var oSource = oEvent.getSource();
    var oItems = oSource.getModel().getProperty("/downRecs");
    oItems.push({
        "Property1": "Value1", 
        "Property2": "Value2", 
        ...
    });
    oSource.getModel().setProperty("/downRecs", oItems);
    

    【讨论】:

    • 所以在我的 XML 中,我会在我希望它显示的位置添加 {downRecs/length},对吗?这实际上是 {downRecs.length}('.' 而不是 '/')吗?当用户选择各种选择标准并设置模型时,downRecs 的内容会重新加载,但不像您在 setProperty 调用中显示的那样。
    • @toxvaerd 你从哪里听到的? ui5绑定中没有这种东西。
    • 我尝试了上述大部分方法,但都没有成功 - 无法加载页面。如果其他人有建议,我将不胜感激。我已经尝试了很多,到目前为止没有任何帮助。
    • @aborjinik 我在 1.24 中将它与 JSONModel 一起使用,它工作正常 :-) 也许它只是一个 JSONModel 的东西?
    • @toxvaerd 无论模型类型如何,它都不能在任何版本的 ui5 中工作。
    【解决方案3】:
     xml view 
        <Button text="click" press="click"></Button>
            <Table id="idProductsTable"
        inset="false"
        items="{/ProductCollection}">
        <headerToolbar>
          <Toolbar>
            <Label id="idset" ></Label>
          </Toolbar>
        </headerToolbar>
        <columns>
          <Column 
            width="12em">
            <Text text="Product" />
          </Column>
          <Column
            minScreenWidth="Tablet"
            demandPopin="true">
            <Text text="Supplier" />
          </Column>
        </columns>
        <items>
          <ColumnListItem>
            <cells>
              <ObjectIdentifier
                title="{Name}"
                text="{ProductId}"
                class="sapMTableContentMargin" />
              <Text
                text="{SupplierName}" />
                </cells>
          </ColumnListItem>
        </items>
      </Table>
    
    controller.js
    onInit: function() {
        var data= {
            "ProductCollection": [
                {
                    "ProductId": "1239102",
                    "Name": "Power Projector 4713",
                    "SupplierName": "Titanium"
    
                },
                {
                    "ProductId": "2212-121-828",
                    "Name": "Gladiator MX",
                    "SupplierName": "Technocom"
    
                }]
                }
        var oModel = new sap.ui.model.json.JSONModel();
        oModel.setData(data);
        this.getView().setModel(oModel);
    },
    click:function(){
    var count= this.getView().byId("idProductsTable").getItems().length;
    var id= this.getView().byId("idset").setText("Record="+count);
    alert("Record="+count);
    }
    

    【讨论】:

    • 泰。我会试试的。通过获取每次进行 ajax 调用时收到的项目数量,我在某种程度上能够绕过它。但我也会尝试你展示的内容,虽然我没有按钮可以按下,但我会看看我可以如何工作。
    【解决方案4】:

    还有一种简单的方法

    oTable._getRowCount()

    【讨论】:

    • 你在哪里找到这个方法的?
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多