我有一个ASP.NET MVC 3页面。在它上面,我有一个表,我使用来自ajax调用的JSON数据转换为jqGrid。网格具有以下设置:
myGrid = $('#myGrid');
myGrid.jqGrid({
caption: 'My Grid',
datatype: 'local',
data: data.rows,
height: 250,
pager: '#myPager',
viewrecords: true,
colModel: [
...,
{
label: 'blah',
name: 'blah',
align: 'left',
sortable: true,
editable: false,
width: 85,
formatter: 'date',
sorttype: 'date',
datefmt: 'm/d/Y',
formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' }
},
...
]
});
// turn on filter toolbar
myGrid.filterToolbar();
data.rows从ajax调用返回。除了一个以外,这种方式都有效。我可以对客户端进行分页,对客户端进行排序,并按照我显示colModel的字段进行搜索。这个'blah'字段是一个日期字段,它以mm / dd / yyyy格式正确显示日期。但是,当我在工具栏中输入类似11/17/2010的内容并按回车键时,搜索会返回0条记录。
所以我深入挖掘了jqGrid代码,这是它在搜索之前生成的内容:
{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]}
最终,当它遍历每一行并评估该字段上的操作时,eval(m)&& p.push(this)line,m是这个:
(String(this.blah).substr(0,10) == String("11/17/2010"))
基本上,在我看来它并不认为该字段是一个日期。它调用parse而不是parseDate。任何人有任何想法如何解决这个问题?我知道搜索服务器端很容易,我可以传递该字符串,解析它,然后bam。但如果可以,我想留在客户方面。我能够在Oleg和Tom提出的一些样本中复制这个,所以这是一个问题,或者我在配置中遗漏了一些东西......
答案 0 :(得分:3)
我发现你的问题很有趣,所以+1来自我的问题。因为您发布了
行(String(this.blah).substr(0,10) == String("11/17/2010"))
在本地搜索期间在eval
中使用我认为您花了很多时间来了解如何实现本地搜索。因为您看到上面的行(请参阅(String(this.blah).substr(0,10) ...
)不是应该做的(String(this.blah)
的值将是“2010-11-17”而不是“11/17/2010”),你可以覆盖jqGrid的相应功能(_getStr
内部的函数$.jgrid.from
)并解决问题。
前段时间我花了很多时间来准备相应的the demo,这证明了这种技巧。该演示准备为the answer in trirand forum。在问题中,我想在搜索'bénevise'
时找到'benevise'
之类的字符串。因此,必须实现真正的自定义本地搜索。我希望这些信息足以帮助您解决您所描述的问题。
更新:在我看来,我找到了一个更简单的解决方法。您应该只为具有数据的searchoptions: {sopt: ['eq','ne']}
列定义'blah'
。然后"bw"
(开头)不会用于该列。 “等于”和“不等于”操作在本地搜索中正常工作。
更新2 :Here是我使用sopt
选项的工作示例。