在jqgrid中过滤时是否可以发送字段类型?

时间:2011-03-10 17:15:43

标签: javascript jquery jqgrid

我的jqgrid客户端应用发送了这个:

{ "groupOp":"AND", "rules":[{"field":"customernumber", "op":"ge", "data":"200"}]}

是否可以使jqgrid甚至发送字段类型......

  

{“groupOp”:“AND”,“rules”:[{“field”:“customernumber”,“type”:“int”:,“op”:“ge”,“data”:“200” }]}

2 个答案:

答案 0 :(得分:2)

首先,jqGrid中不存在您需要的功能。此外,问题是 jqGrid没有关于您可以直接使用的列数据的类型信息。 jqGrid只有sorttype这样的设置,仅用于本地排序或formatteredittype。另外存在stype,可以是“文本”或“选择”。因此该列没有数据类型。在我看来,拥有新的datatype属性对于jqGrid的未来版本来说是一个有趣的功能。

现在关于现实。如果您知道列设置中的哪个是您的案例中的数据类型(sorttypeformatteredittype),则可以扩展filter postData参数中的信息1}}包含您需要的信息。要实现此功能,您可以使用serializeGridData作为示例。在serializeGridData事件句柄内,您可以检查filter参数。如果存在,您可以将jQuery.parseJSON转换为对象,生成的过滤器对象可以通过type数组中的其他属性rules轻松扩展。为此,您可以将field数组项的rules属性与edittype(或sorttypeformatter)属性相匹配{{1} }}。顺便说一句,您可以使用colModel轻松地从网格中引用colModel。修改$("list").jqGrid('getGridParam','colModel')对象后,您可以将其转换回json2.js中带有JSON.stringify函数的JSON,并将其放置到filter,并将其发送到服务器。

我在上面解释的只是一个粗略的架构,但它可以相对容易地实现。

答案 1 :(得分:1)

我很久以前也有同样的需求,我通过传递“知识”服务器端来克服它。

问题: jqGrid不支持你需要的东西,它不关心字段的类型,它确实有意义,强制执行此操作可能会导致其他问题。 实现自己的序列化机制看起来过于复杂,可能会在控件的未来更新中给您一些问题。 对我来说这个解决方案随处可见,因为我的应用程序通常有很多支持搜索的网格,我不想覆盖任何默认网格的功能,以避免未来控制更新出现问题。

我的解决方案: jqGrid给你的是列名,过滤值和操作。 在服务器端,您可以按列名称获取列的类型,这样您实际上就不需要在线路中使用此信息。 把这些知识放在服务或控制器上或者你要求执行serach请求的地方,一切都应该没问题。

简短说明: 在我的情况下,我使用.net实体框架,所以我从ORM对象属性类型获取列类型。

干杯! 亚历