我使用了两个日期控件来过滤行转发器,
oF_cell5 = new sap.ui.commons.layout.MatrixLayoutCell({id:"F05",colSpan : 2});
var oCreateFrom = new sap.ui.commons.DatePicker("EV_AE_DATE1",
{width:"150px",placeholder:"Created From",
change:function(oEvent){
oController.onChangeFilterValue(oEvent);}
})
oF_cell51 = new sap.ui.commons.layout.MatrixLayoutCell({id:"F051",colSpan : 2});
var oCreateTill = new sap.ui.commons.DatePicker("EV_AE_DATE2",
{width:"150px",placeholder:"Created Till",
change:function(oEvent){
oController.onChangeFilterValue(oEvent);}
});
现在我有一个rowrepeater,其中一列是CreatedOn日期,如.. ,,
new sap.m.HBox({
items:[new sap.ui.commons.TextView({text:"Created on:"}),
new sap.ui.commons.TextView("TV11")
.bindProperty("text",
{
path: "CM_EventList>CREATEDON",
type: new sap.ui.model.type.Date({pattern:"MMM dd, yyyy",
source : {pattern : "dd.MM.yyyy"}})
})]
}),
在控制器中我把这段代码写成...... ,,
onInit: function() {
var model = new sap.ui.model.json.JSONModel("eventlist.json");
model.setData();
sap.ui.getCore().setModel(model,"CM_EventList");
},
onChangeCmFilterValue : function(oEvent){
var CM_FDATEVAL = sap.ui.getCore().byId("EV_AE_DATE1").getValue();
var CM_TDATEVAL = sap.ui.getCore().byId("EV_AE_DATE2").getValue();
var CM_Date = new sap.ui.model.Filter('CM_EventList>CREATEDON',
sap.ui.model.FilterOperator.BT,CM_FDATEVAL,CM_TDATEVAL);
var oCM_VBOX1 = sap.ui.getCore().byId("EV_CM_VBOX");
var oCM_RR1 = sap.ui.getCore().byId("EV_AE_ROWREPEATER");
oCM_RR1.bindRows('CM_EventList>/eventlist',oCM_VBOX1,null,[CM_Date]);
},
事件列表是我的单独json文件,其日期值为
{
"eventlist": [
{
"CREATEDON": "10.07.2014",
},
{
"CREATEDON": "10.08.2014",
},
.......
and so on..........
现在,如果从我的日期控件中选择一个日期范围,那么行转发器应该显示在我的json中日期范围之间的记录。
但过滤器无效。 请帮帮我。
由于 Sathish所在
答案 0 :(得分:0)
我认为您应该检查以下内容的值。格式应不同于您的json值“CREATEDON”:“10.08.2014”。
var CM_FDATEVAL = sap.ui.getCore().byId("EV_AE_DATE1").getValue();
var CM_TDATEVAL = sap.ui.getCore().byId("EV_AE_DATE2").getValue();
请尝试使用以下命令创建DatePicker:
type: new sap.ui.model.type.Date({pattern: ""yyyy-MM-dd""})
var CM_FDATEVAL_DATE = new Date(sap.ui.getCore().byId("EV_AE_DATE1").getValue());
var CM_TDATEVAL_DATE = new Date(sap.ui.getCore().byId("EV_AE_DATE2").getValue());
此致 阿伦
答案 1 :(得分:0)
首先,如果尚未使用DatePicker
Control作为视图中的日期字段。
您可以使用方法GetDateValue()
将日期选择器的值作为Date对象获得。然后,您可以使用这些日期对象为数据模型的datetime字段创建过滤器。
var dateFrom = this.getView().byId("filterDateFrom").getDateValue();
var dateTo = this.getView().byId("filterDateTo").getDateValue();
if (dateFrom != null && dateTo != null) {
filter = new sap.ui.model.Filter(
"CM_EventList>CREATEDON",
sap.ui.model.FilterOperator.BT,
dateFrom,
dateTo
);
}
顺便说一句:请注意,两个日期对象实际上都代表一天中开始的时刻(0:00:00),而数据库中的时间戳通常是一天中的某个时间点。因此,当您要在两个日期之间(包括两个日期)进行搜索时,您需要在dateTo
上添加一天:
dateTo.setDate(dateTo.getDate() + 1);
您可能需要或不必解决的另一个问题是时区……当然还有all the other falsehoods programmers believe about time。