jqgrid searchToolbar datepicker不过滤

时间:2017-03-14 23:09:21

标签: jquery jquery-ui datepicker jqgrid free-jqgrid

我现在正在使用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
                                            });
};

1 个答案:

答案 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);
            }
        });
    }
}

我建议您在代码中进行一些其他更改,以简化它或修复一些选项:

  • jqGrid中没有contentType选项。要设置基础contentType函数的jQuery.ajax参数,应使用ajaxGridOptions: { contentType: "application/json; charset-utf-8" }
  • 最好删除免费jqGrid的默认值选项mtype: 'GET'ignoreCase: trueheight: '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 。您可以跳过方法navGridinlineNav中的寻呼机选项,依此类推。 navGrid的电话可能就像$('#list').jqGrid('navGrid', {edit: false,..});一样。
  • 您可以在jqGrid的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: trueforceClientSorting: true选项。

选项forceClientSorting: true强制本地将在第一页之前对服务器返回的数据进行排序和过滤。如果您使用sortname: 'LockedDate',那么服务器必须LockedDate对返回的数据进行排序。如果您使用选项forceClientSorting: true,则服务器可以返回未排序的数据,并且在显示第一页之前,免费jqGrid对数据 localy 进行排序。

the answer中描述了选项multiPageSelection: trueThe demo展示了结果。该选项允许1)在页面上保持选择(一个可以在一个页面上选择行,更改页面,在另一个页面上选择行,返回到第一个页面,并且先前选择的行将被保留)2)一个可以< em>预先选择行。