2011-03-10 62 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並將其發送到服務器。

我上面解釋的只是一個粗略的模式,但它可以相對容易地實現。

相關問題