我现在正在使用jqGrid(版本:jqGrid 4.14.1-pre,free jqGrid),并希望有一个带有datepicker的搜索工具栏。 当我单击文本框时,会弹出日期选择器,并使用我选择的日期更新文本框。但是,它不会过滤数据。
我真正想要的是sopt:[" le"]但失败了。为了检查目的,我尝试了#34; eq"太。但在这两种情况下,所有数据行都会消失。
我确实设置了
loadonce:true
并尝试了
$('#list')[0].triggerToolbar();
由于我确实使用了旧版本的jqGrid,我在GitHub中更新了最新版本并尝试但仍然失败。
{label: 'LockedDate', name: 'LockedDate', index: 'LockedDate', sorttype: 'date', clearSearch: true,
sortable: true,
resizable: false,
hidden: false,
search: true,
formatter: 'date',
formatoptions: {srcformat: 'm/d/Y h:i:s A', newformat: 'm/d/Y h:i:s A'},
searchrules: {date: true},
searchoptions: {
sopt: ["le"],
dataInit: function (element) {
$(element).datepicker({
dateFormat: 'mm/dd/yy',
changeYear: true,
changeMonth: true,
showButtonPanel: true,
onSelect: function () {
$(this).keydown();
$('#list')[0].triggerToolbar();
},
onChange: function () {
$('#list')[0].triggerToolbar(); }
})
}
}
}
正如我记得的那样,我在stackoverflow上看到了Oleg的答案(抱歉,丢失了链接),谈论旧版本中的日期时间解析问题。我的日期格式是原因吗?
由于其他搜索工具栏运行良好,我不认为这是寻呼机或网格本身的问题。任何人都可以帮我解决我在哪里设置日期选择错误的问题?
谢谢! :)
我不确定是否需要这个jqGrid代码,但以防万一我会放:
$('#list').jqGrid({
url: '/LockedObjects/GetLockedObjects',
datatype: "json",
contentType: "application/json; charset-utf-8",
mtype: 'GET',
colModel: [
{label: 'LockedBy', name: 'LockedBy',index: 'LockedBy', sorttype: 'text', clearSearch: true,},
{
label: 'LockedDate', name: 'LockedDate', index: 'LockedDate', sorttype:'date', clearSearch: true,
sortable: true,
resizable: false,
hidden: false,
search: true,
formatter: 'date',
formatoptions: {srcformat: 'm/d/Y h:i:s A', newformat: 'm/d/Y h:i:s A'},
searchrules: {date: true},
searchoptions: {sopt: ["le"],
dataInit: function (element) {
$(element).datepicker({
dateFormat: 'mm/dd/yy',
changeYear: true,
changeMonth: true,
showButtonPanel: true,
onSelect: function () {
$(this).keydown();
$('#list')[0].triggerToolbar();
},
onChange: function () { $('#tbLockedPartiesHistory')[0].triggerToolbar(); }
})
}
}
}],
rowNum: 20,
rowList: [20, 30, 50],
sortName: 'LockedDate',
ignoreCase: true,
viewrecords: true,
sortOrder: 'asc',
loadonce: true,
multiselect: true,
jsonReader: {
repeatitems: false,
root: 'rows',
page: 'page',
total: 'total'
},
height: 'auto',
pager: '#listPager',
loadError: function (xhr, status, error) {
console.log(xhr);
console.log(status);
console.log(error);
}
});
$('#list').jqGrid('filterToolbar', {searchOnEnter: false, ignoreCase: true, searchOperators:true,defaultSearch: 'cn' });
$('#list').jqGrid('navGrid', '#listPager', {edit: false,
add: false,
del: false,
refresh: true
});
};
答案 0 :(得分:2)
以下searchoptions
应该有效:
searchoptions: {
sopt: ["le"], // or any other search operation
dataInit: function (element) {
var self = this; // save the reference to the grid
$(element).datepicker({
dateFormat: 'mm/dd/yy',
changeYear: true,
changeMonth: true,
showButtonPanel: true,
onSelect: function () {
setTimeout(function () {
self.triggerToolbar();
}, 0);
}
});
}
}
我建议您在代码中进行一些其他更改,以简化它或修复一些选项:
contentType
选项。要设置基础contentType
函数的jQuery.ajax
参数,应使用ajaxGridOptions: { contentType: "application/json; charset-utf-8" }
mtype: 'GET'
,ignoreCase: true
,height: 'auto'
。sortOrder: 'asc'
。没有sortOrder
选项(仅sortorder
选项,默认值为'asc'
)。同样,选项sortName: 'LockedDate'
是错误的,它将被忽略。正确的选项是sortname: 'LockedDate'
。jsonReader: {repeatitems: false, root: 'rows', page: 'page', total: 'total' }
替换为jsonReader: { repeatitems: false }
。 root, page, total
jsonReader
的所有其他属性都有默认值,因此可以跳过。在大多数情况下,甚至可以跳过jsonReader: { repeatitems: false }
,因为免费的jqGrid会尝试检测repeatitems
。pager: true
代替pager: '#listPager'
。您可以从HTML页面中删除不需要的<div id="listPager"></div>
。免费的jqGrid将自动创建相应的div 。您可以跳过方法navGrid
,inlineNav
中的寻呼机选项,依此类推。 navGrid
的电话可能就像$('#list').jqGrid('navGrid', {edit: false,..});
一样。searchOnEnter: false, ignoreCase: true, searchOperators:true, defaultSearch: 'cn'
参数内指定默认搜索选项,例如searching
。它简化了filterToolbar
或搜索对话框的后续使用。例如,您可以使用jqGrid选项searching: { searchOperators: true, defaultSearch: 'cn', closeOnEscape: true, searchOnEnter: true, multipleSearch: true, multipleGroup: true}
。 loadError
回调。免费的jqGrid有默认回调,从服务器加载jqGrid数据时会显示错误。错误将显示在列标题和网格主体之间的div中(请参阅the picture)。通过指定loadError
回调将显示较少的信息,因为免费的jqGrid显示默认值。colModel
个项目。列LockedBy
:{label: 'LockedBy', name: 'LockedBy',index: 'LockedBy', sorttype: 'text', clearSearch: true,}
的定义应替换为{ name: 'LockedBy', searchoptions: { clearSearch: true } }
。应删除列label, index, sortable, hidden, search
的属性LockedDate
,并且应在clearSearch: true
内移动属性searchoptions
。您可以考虑额外使用免费jqGrid的multiPageSelection: true
和forceClientSorting: true
选项。
选项forceClientSorting: true
强制本地将在第一页之前对服务器返回的数据进行排序和过滤。如果您使用sortname: 'LockedDate'
,那么服务器必须按LockedDate
对返回的数据进行排序。如果您使用选项forceClientSorting: true
,则服务器可以返回未排序的数据,并且在显示第一页之前,免费jqGrid对数据 localy 进行排序。
the answer中描述了选项multiPageSelection: true
。 The demo展示了结果。该选项允许1)在页面上保持选择(一个可以在一个页面上选择行,更改页面,在另一个页面上选择行,返回到第一个页面,并且先前选择的行将被保留)2)一个可以< em>预先选择行。