2011-03-10 53 views
1

我jqGrid的客户端应用程序发送此:在jqgrid中过滤时可以发送字段类型吗?

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

是有可能使jqGrid的发送,即使字段类型某物像

{ “groupOp”: “和”, “规则”:[{ “field”:“customernumber”,“type”:“int”:,“op”:“ge”,“data”:“200”}]}

回答

1

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

问题: 的jqGrid不支持你所需要的,它并不关心字段的类型,它有一定道理的方式,执行本会引起你的其他问题。 实现您自己的序列化机制看起来过于复杂,可能会给您在控件的未来更新上带来一些问题。 对我来说,这个解决方案在各个地方都可以使用,因为我的应用程序通常有很多搜索启用的网格,我不想覆盖任何默认网格的功能以避免未来控制更新出现问题。

我的解决方案: jqGrid为您提供的是列名称,筛选器值和操作。 服务器端你可以通过它的列名获得列的类型,所以你实际上不需要这些信息在线中传播。 把这些知识放在服务或控制器上,或者你打电话来执行请求的地方,一切都应该没问题。

便笺: 在我的情况下,我使用.net实体框架,以便从ORM对象属性类型中获取列类型。

干杯! Alex

2

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

现在谈谈现实。如果您知道列设置中的哪些数据类型是您的案例中的数据类型(sorttype,formatteredittype),则可以使用所需信息从的filter参数扩展信息。为了实现这个,你可以使用serializeGridData为例。在serializeGridData事件句柄的内部,您可以检查filter参数。如果存在,则可以将其转换为对象,其生成的滤镜对象可以通过rules阵列中的附加属性type轻松扩展。为此,您可以将rules阵列的项目的field财产与colModeledittype(或sorttype,formatter)财产匹配。顺便说一句,你可以很容易地从$("list").jqGrid('getGridParam','colModel')从网格获得参考colModel。在修改filter对象后,您可以使用来自json2.js的JSON.stringify函数将其转换回JSON并将其放置到postData并将其发送到服务器。

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

相关问题