Asp.net mvc jqGrid过滤器工具栏和日期并选择过滤器

Asp.net mvc jqGrid过滤器工具栏和日期并选择过滤器,asp.net-mvc,jqgrid,filtering,Asp.net Mvc,Jqgrid,Filtering,我有一个jqGrid: $('#jqgFileInfoList').jqGrid({ url: '@Url.Action("GetFiles", "File")', datatype: 'json', mtype: 'POST', colNames: ['Id', 'Name', 'Interface', 'Amount', 'Type', 'Created', 'Status'], colModel: [ { jsonmap: 'Id',

我有一个jqGrid:

$('#jqgFileInfoList').jqGrid({
    url: '@Url.Action("GetFiles", "File")',
    datatype: 'json',
    mtype: 'POST',
    colNames: ['Id', 'Name', 'Interface', 'Amount', 'Type', 'Created', 'Status'],
    colModel: [
        { jsonmap: 'Id', name: 'Id', formatter: 'integer', align: 'right', hidden: true },
        { jsonmap: 'Name', name: 'Name', align: 'right', hidden: true },
        { jsonmap: 'InterfaceName', name: 'InterfaceName', align: 'left', width: '100%', sorttype: 'text', frozen: true, search: true },
        { jsonmap: 'Amount', name: 'Amount', formatter: 'currency', align: 'right', width: '100%', sorttype: 'number', search: true },
        { jsonmap: 'Type', name: 'Type', align: 'right', width: '100%', sorttype: 'text', search: true },
        { jsonmap: 'RunDate', name: 'RunDate', formatter: 'date', align: 'right', width: '100%', sorttype: 'date', search: true },
        { jsonmap: 'Status', name: 'Status', align: 'right', width: '100%', sorttype: 'text', formatter: formatStatus, search: true }
    ],
    sortname: 'RunDate',
    sortorder: 'desc',
    pager: $('#jqgPagerFileInfoList'),
    rowNum: 5,
    viewrecords: true,
    height: '100%',
    autowidth: true,
    refresh: true,
    ignoreCase: true,
    jsonReader: {
        repeatitems: false,
        root: "rows"
    },
    altRows: true,
    altclass: 'jqGridAltRow',
    loadComplete: function () {
        $("tr.jqgrow:odd").addClass('jqGridAltRow');
    }
});

$('#jqgFileInfoList').jqGrid('filterToolbar', { searchOnEnter: false, enableClear: true, stringResult: true });
过滤正在工作,除了我想修改的几列

Created/RunDate列我想以某种方式过滤一个范围。选择一个日期是没有用的

我想使用的界面、类型和状态列下拉列表。最好的方法是什么

我发现jqGrid文档很难理解,因为有太多的选项。我花了一个小时才弄明白,我需要
stringResult:true
将我的筛选选项放入控制器中的
GridSettings.Where
属性

如果重要的话,它是一个.NET4.0,MVC应用程序

编辑奖金问题:如何使它不区分大小写。

我同意,对于开始使用它的开发人员,尤其是.NET开发人员,它只能更多地用作参考,而不能用作介绍

关于你的问题:

1) 没有简单的方法实现按日期范围搜索。你可以做一些像上面描述的那样的把戏。使用
beforeSearch
回调
filterToolbar
onSearch
回调高级搜索允许在应用搜索过滤器之前“预处理”搜索过滤器,但这一切都非常棘手。在使用服务器端排序的情况下,您可以直接在服务器端实现相同的排序

2) 在jqGrid中实现下拉列表的方法有很多。主要的替代方法是使用的
value
dataUrl
属性。最佳选择取决于您的具体要求

如果列中有一些较小的值集,这些值集比较静态,也比较动态,那么使用
value
是非常实用的。例如,如果在网格中使用
formatter:“checkbox”
将布尔数据显示为复选框,则您必须确保在列的筛选器中使用下拉列表。在这种情况下,使用如下设置

stype: "select", searchoptions: { sopt: ["eq", "ne"], value: ":All;true:Yes;false:No" }
这将是非常实际的。顺便说一下,您可以在对象窗体中使用
value

value: {"": "All", true:"Yes", false: "No"}
在其他情况下,如果值的数量较少,则可以使用
value
在搜索过滤器中实现下拉列表

如果从数据库动态获取的值列表中包含了
dataUrl
,则应使用
dataUrl的用法。我可以向您解释相应实现的主要思想

显示简单的纯JavaScript代码,演示如何仅在客户端实现选择和自动完成。在服务器端分页和过滤的情况下,应该选择另一种实现方式。演示如何在ASP.NET MVC解决方案中实现jQuery UI自动完成

我认为jQueryUIAutoComplete在某些情况下是一个很好的选择,特别是在可能的选项数量非常大的情况下

更新:有许多方法可以使搜索不区分大小写。在使用本地搜索的情况下(使用
datatype
作为
“json”
xml”
或使用
loadonce:true
)我们应该只使用jqGrid的
ignoreCase:true
选项。在服务器端搜索的情况下,您应该在服务器端使搜索不敏感。我个人只在筛选过程中使用。例如,而不是像

WHERE Name LIKE('%'+@s+'%'))
我用

WHERE Name将SQL\u Latin1\u General\u CP1\u CI\u排序为LIKE('%'+@s+'%'))
关于您发布的代码,还有一点小评论:

  • 始终使用
    gridview:true
    选项。有关更多详细信息,请参阅
  • 请始终以
    pager:“\jqgPagerFileInfoList”
    的形式指定寻呼机,而不是以
    pager:$(“\jqgPagerFileInfoList”)
    的形式指定寻呼机
  • 不要使用不存在的选项,如
    refresh:true

  • 我建议您使用
    autoencode:true
    选项强制将从服务器返回的数据解释为文本,而不是HTML片段。如果没有这些选项,您可能无法显示具有
    Wow…很棒答案的文本,我将开始实现这一点。