在SAPUI5中获取表格行数

7
我有一个显示记录列表的sap.ui.Table。我想获取数据中记录的数量。
我已经阅读了这篇文章:SAP UI 5如何打印总表行,但它没有帮助到我。
以下是表格的代码(为了缩小帖子的大小,列的代码已被删除):
  <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个可能的记录。

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

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

4个回答

11

绑定长度不是您可以绑定的属性。此外,参考链接中的内容不正确,因为您无法为属性初始化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,您可以将其绑定到触发更改事件的内容,例如绑定长度或所选项目的数量。


尝试了你的例子。当我在 getBinding 调用之后使用 console.log(oBinding) 时,它显示为“未定义”。如果我查看我的表格(oTable)并浏览,它会显示绑定作为我的 JSON 数组('/downRecs')。我添加了你展示的三行代码,但由于 oBinding 说未定义,我得到了 attachChange 的错误。我有什么遗漏吗? - user3861284
我终于让它工作了...我不得不把代码放到与JSON调用相同的区域。谢谢。 - user3861284

1
 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 调用时获取接收到的项目数量来解决了一些问题,但是我也会尝试你所显示的方法,虽然我没有按钮可以按,但我会看看如何加入一个按钮。 - user3861284

0

你尝试过绑定到 {/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调用。 - user3861284
@toxvaerd 你从哪里听到这个的?在ui5绑定中没有这样的东西。 - aborjinik
我尝试了上面大部分的方法,但都没有成功——页面无法加载。如果还有其他人有建议,我会非常感激。我已经尝试了很多方法,但目前为止都没有帮助。 - user3861284
1
@aborjinik 我在1.24版本中使用了JSONModel,它很好用 :-) 或许这只是JSONModel的一个问题? - toxvaerd
@toxvaerd,无论模型类型如何,在任何版本的UI5中都不起作用。 - aborjinik

-1

还有一种简单的方法

oTable._getRowCount()


你在哪里找到这个方法的? - zygimantus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接