我创建了一个包含少量列的表,从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所在
答案 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,确保模型具有要绑定的属性。
祝你好运。