SAP UI5 - 无法在“表”列中选择多个“复选框”

时间:2015-02-04 15:22:55

标签: hana sapui5

我创建了一个包含少量列的表,从Odata获取数据,我创建了另一个列只有复选框。

我的代码是

var oTable = new sap.ui.table.Table("Brand",{
                        title: "Brand List",
                    //  visibleRowCount: 10,
                        //firstVisibleRow: 3,
                        selectionMode: sap.ui.table.SelectionMode.None,
                     navigationMode: sap.ui.table.NavigationMode.Paginator,
                        fixedColumnCount: 10,
                        width:"700px"

                    }); 

  oTable.addColumn(new sap.ui.table.Column({
                    //  visible: false,
                        label: new sap.ui.commons.Label({text: "Country"}),
               template: new  sap.ui.commons.TextView().bindProperty("text", "COUNTRY_ID"),
                        sortProperty: "COUNTRY_ID",
                        filterProperty: "COUNTRY_ID",
                        flexible : false,
                        width:"1px"
                    }));

                    //Define the columns and the control templates to be used
                    oTable.addColumn(new sap.ui.table.Column({
                        label: new sap.ui.commons.Label({text: "Brand"}),
                        template: new sap.ui.commons.TextView().bindProperty("text", "BRAND"),
                        sortProperty: "CUSTOMER",
                        filterProperty: "CUSTOMER",
                        width:"250px"
                    }));

oTable.addColumn(new sap.ui.table.Column({
                        label: new sap.ui.commons.Label({text: "2013",textAlign:"Center"}),
                        template: new sap.ui.commons.CheckBox().bindProperty("checked","checked"),
                        sortProperty: "checked",
                        filterProperty: "checked",
                        width: "100px",
                        hAlign: "Center"
                    }));

当表长度为10(在表创建语句中定义)时,它可以正常工作。但如果我的品牌列表超过10(有时可能超过100),仍然是没有。复选框的创建是10.所以在表格中如果转到下一页(分页器模式),复选框仍然是相同的。

因此,如果我在第一页中选择一个品牌并在第三页中选择一个品牌,则复选框保持不变。除第一页外,它不会创建复选框。

请帮我解决这个问题。

由于 Sathish所在

1 个答案:

答案 0 :(得分:1)

尝试2.这一次,我会尝试回答这个问题。 Sathish,好像你的模型没有考虑checkbox属性。您的OData服务是向您返回的数据(为简单起见使用JSON表示法),如下所示:

   data : [{
      "COUNTRY_ID" : "USA",
      "BRAND" : "Nike"
    },{ 
      "COUNTRY_ID" : "GER",
      "BRAND" : "Adidas"
    },{ 
      "COUNTRY_ID" : "ITA",
      "BRAND" : "Lotto"
    }]

但是您正在使用返回的模型,就好像每个对象中都有第三个属性,名为“checked”。 E.g。

   data : [{
      "COUNTRY_ID" : "USA",
      "BRAND" : "Nike",
      "checked" : false
    },{ 
      "COUNTRY_ID" : "GER",
      "BRAND" : "Adidas",
      "checked" : false
    },{ 
      "COUNTRY_ID" : "ITA",
      "BRAND" : "Lotto",
      "checked" : false
    }]

如果此属性不是模型的一部分,那么您实际上没有任何东西可以将您的复选框绑定到。由于模型中不存在该属性,因此复选框列不会绑定任何内容。当表初始化为10行时,这就是您创建的复选框控件的数量,不再是。一旦开始分页,数字行永远不会改变,但分页将OData数据集的下10行绑定到表行和列。由于数据集不包含“已检查”属性(我的假设),因此列出复选框的列不会反弹到模型的数据,因此选中的复选框永远不会更改。

我建议你做两件事之一 - 更新OData服务以包含这个附加属性(选中),并将复选框列绑定到该属性,或者两个,将模型数据复制到新模型,添加'检查'属性到集合中的每个对象,然后将表绑定到此新模型。无论哪种方式,您都需要确保模型具有可以绑定复选框的属性。

这个指向可编辑Table控件的链接演示了我所指的主要内容: Editable Table control 在此示例中,作者通过在其集合中的每个对象中使用“editable”属性来使表格可编辑。此属性(对于模型数据中的每个条目都存在)绑定到表的第二列中的TextField控件。

template: new sap.ui.commons.TextField({  
   value: '{lname}',  
   editable: '{edit}' // Binding editable property of text field to 'edit' attribute of Model   
}), 

您需要做一些非常相似的事情,但对于Checkbox,确保模型具有要绑定的属性。

祝你好运。