Asp.net mvc jqGrid过滤器工具栏和日期并选择过滤器
我有一个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',
$('#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…很棒答案的文本,我将开始实现这一点。