2010-07-24 201 views
1

我正在使用jqGrid 3.7.2本地数据。对于某些列,缺省的分类类型是不够的。我需要提供一个自定义排序类型,我从文档中理解是可能的。我不知道如何让它工作。下面的代码是我的最佳尝试 - 我不能让它调用自定义排序功能。这个想法是按照'GK' - >'DEF' - >'MID' - >'STR'的顺序排列'Posn'字段。这是我想获得工作的代码:jqGrid与自定义sorttype

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <title>Table Testbed</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/south-street/jquery-ui.css"> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> 

    <link rel="stylesheet" type="text/css" href="/thirdParty/jqGrid/ui.jqgrid.css" > 
    <script type="text/javascript" src="/thirdParty/jqGrid/grid.locale-en.js"></script> 
    <script type="text/javascript" src="/thirdParty/jqGrid/jquery.jqGrid.min.js"></script> 

    <script type="text/javascript"> 
    $().ready(function() 
    { 
    tableToGrid("#playerTable", 
    { 
    datatype: "local", 
    sortable: true, 
    hidegrid: false, 
    multiselect: false, 
    altRows: true, 
    height: "100%", 
    width: "155px", 
    shrinkToFit: true, 
    rowNum: 100, 
    colNames: ['Posn','Name'], 
    colModel: [ 
    {name:'Posn', index:'Posn', width:100, sorttype: 
     function(cell) 
     { 
     if (cell=='GK') return '0'; 
     if (cell=='DEF') return '1'; 
     if (cell=='MID') return '2'; 
     if (cell=='STR') return '3'; 
     } 
    }, 
    {name:'Name', index:'Name', width:200, sorttype:"text"} 
    ] 
    }); 
    }); 
    </script> 
</head> 

<body> 
    <table id="playerTable"> 
    <thead> 
    <tr><th>Posn</th><th>Name</th></tr> 
    </thead> 
    <tbody> 
    <tr><td>GK</td><td>Almunia</td></tr> 
    <tr><td>GK</td><td>Fabianski</td></tr> 
    <tr><td>DEF</td><td>Campbell</td></tr> 
    <tr><td>DEF</td><td>Clichy</td></tr> 
    <tr><td>MID</td><td>Denilson</td></tr> 
    <tr><td>MID</td><td>Diaby</td></tr> 
    <tr><td>STR</td><td>Arshavin</td></tr> 
    <tr><td>STR</td><td>Bendtner</td></tr> 
    </tbody> 
    </table> 
</body> 
</html> 
+0

你可以在发布时设置你的代码的格式吗?在目前的状态下它有点不可读。 – kander 2010-07-24 09:52:54

+0

另外,函数tableToGrid是什么? – kander 2010-07-24 10:04:59

回答

3

也许你读了关于sorttype作为一个函数在托尼的回答我的线程http://www.trirand.com/blog/?page_id=393/help/custom-local-sort-with-respect-of-the-function-as-index/的用法。你的问题可能很容易解决。我建议使用index作为自定义排序本地jqGrid数据的函数,在3.7.1版本中可以正常工作,但在jqGrid的3.7.2版本中不会更多。功能sorttype作为一个函数在版本3.7.2后发布的jqGrid 中实现。

所以为了能够使用sorttype因为你必须从http://github.com/tonytomov/jqGrid/tree/master下载jqGrid的最新版本的功能。这是jqGrid的未压缩版本。如果您对jqGrid的未压缩版本不熟悉,我会建议您阅读http://www.trirand.com/jqgridwiki/doku.php?id=wiki:how_to_install#development_installation以了解js文件中的哪些文件以及您应该包含哪些文件。在http://www.ok-soft-gmbh.com/jqGrid/CustomSorttype1.htm下,您可以找到自定义函数真正起作用的代码的工作示例。

+0

绝对太棒了。谢谢。 是的,我确实在你提到的线程中看到了自定义排序的想法,但没有提到这些事情在3.7.2中不起作用!我假设我误解了一些东西。 我认为这对任何使用本地数据的人来说都是至关重要的功能,所以这里是3.7.3! – cjm19682 2010-08-03 12:07:26

+0

欢迎你!我对这个功能的重要性有相同的看法。顺便说下,jqrid的版本将是3.8而不是3.7.3,但它并不重要。不过,我很乐意帮助你! – Oleg 2010-08-03 12:14:07

2

根据this forum post,定制sorttype当电网被初始化,而不是在onSortCol事件只叫:

据我了解它现在,如果我有一个自定义类型sorttype:sortDate,函数sortDate只会在jqGrid初始化时被调用,而不是事件onSortCol。让onSortcol调用SortDate的唯一方法是通过手动控制onSortCol事件并编写这样的单调代码并相应地更新网格?为什么不自定义sorttype:sortDate会自动调用onSortCol事件?我的意思是,当jqGrid获得初始化时,它会正确排序,但是当我调用事件时,它必须做一些构建。为什么我问是因为我的sortDate函数没有任何实际更新jqGrid的代码。它只是返回1,-1或0.它用于jqGrid之外的东西...

这是否解释了您所看到的行为?