2015-12-31 69 views
0

我使用jqgrid 4.6.0jqgrid - 排序列中斷組

當我點擊列標題來排序行時,初始分組會中斷。 數據類型是JSON。

這是colModel:

 {name:'name',width:150,resizable:true,title:false,sortable:true, editable:true}, 
     {name:'value',width:80,resizable:true,title:true,sorttype:'number'}, 
     {name:'col_type',width:80,resizable:false,title:false, editable:false} 

而且分組設置和其他設置:

loadonce:true,toppager:true,hidegrid:false, 
grouping:true,gridview:true,rownumbers:false, 
groupingView: { 
    groupField : ['col_type'], 
    groupText: ['<b> {0} </b>'], 
    groupColumnShow : [false] 
} 

很顯然,我希望行的排序是組裏, 另一個問題,是否有任何一點將colModel中的列設置爲hidden: true?由於它已在groupingView中定義。

+1

您可以驗證[免費jqGrid](https://github.com/free-jqgrid/jqGrid)4.12.0中是否存在相同的問題?您只需要將臨時URL改爲jqGrid文件爲[wiki文章]中描述的URL(https://github.com/free-jqgrid/jqGrid/wiki/Access-free-jqGrid-from-different-CDNs)。免費的jqGrid是自一年以來我開發的jqGrid的分支。它與jqGrid 4.6兼容,但包含許多錯誤修復和增強功能。 – Oleg

+0

我測試過了,它確實工作正常。所以我想這是jqGrid 4.6.0中的一個錯誤? 至於可行性,它確實有效,但看起來有些不同。標題行的字體大小要小得多,並且行的大小也是如此。也許我應該稍微微調一下css。編輯:我會說在一般較小的字體大小。 – user3599803

+0

這給我帶來了另一個問題 - 雖然排序工作正常,最初的組排序,在排序時破壞。 – user3599803

回答

1

我在評論中已經解釋過,服務器返回的數據必須按照groupingView.groupField(您的案例中的字段col_type)進行排序。另一方面,您有數據

var data = {"rows":[ 
     {"col_type":"group1",...}, 
     {"col_type":"group1",...}, 
     {"col_type":"aaa",...}, 
     {"col_type":"group3",...}, 
     {"col_type":"group3",...}, 
     {"col_type":"group4",...}, 
     {"col_type":"group4",...} 
    ]}; 

其中"aaa"組的順序錯誤。 jqGrid可能會保留您的自定義訂單,但您必須通知它。例如,您可以使用定義爲功能的sorttype或使用sortfunc回調函數。例如,您可以將輸入數據擴展到以下

var data = {"rows":[ 
     {"col_type":"group1","col_type_order":1,...}, 
     {"col_type":"group1","col_type_order":1,...}, 
     {"col_type":"aaa","col_type_order":2,...}, 
     {"col_type":"group3","col_type_order":3,...}, 
     {"col_type":"group3","col_type_order":3,...}, 
     {"col_type":"group4","col_type_order":4,...}, 
     {"col_type":"group4","col_type_order":4,...} 
    ]}; 

,並使用col_type

{ 
    name: 'col_type', width:80, resizable:false, title:false, 
    sorttype: function (value, item) { 
     return item.col_type_order; 
    } 
} 

更新:看到修改後的演示https://jsfiddle.net/uz7Ltbjk/7/。如果您使用舊的jqGrid,並且從服務器加載數據並結合loadonce: true,則必須添加隱藏列col_type_order。如果你使用免費的jqGrid,那麼你可以使用additionalProperties。您可以使用simlest格式如下:

additionalProperties: ["col_type_order"] 

它通知的jqGrid閱讀附加屬性(字段)從源數據,並將保存在data參數本地數據內的信息。通過這種方式,您可以使用任何附加信息擴展本地項目,您可以在排序過程中稍後使用這些附加信息。順便說一下,可以有任何類型的其他屬性的值。例如,它可以是對象或數組。此功能可能對主/細節網格或子網格有所幫助。可以一次加載所有需要的信息,然後使用它。

+0

我明白了。這就是我的意思,我只想對組內的數據進行排序。當爲分組列(col_type)定義sorttype回調函數時,是否意味着jqgrid會自動排序:[col_type callback function value],[用戶選擇的列]? 其次,有沒有什麼辦法可以將數據分組而不用定義數據中的組?正如你所看到的我的專欄是隱藏的。我想我需要爲col_type_order創建另一個隱藏列? – user3599803

+0

因爲它發生在我身上,當數據類型爲json時,jqgrid不會保存colModel中未定義的數據。 – user3599803

+0

我不明白sorttype功能,項目只是列數據(字符串),而不是一個對象... – user3599803