生成 jqgrid 后如何对特定列实现自定义排序?

IT技术 javascript jqgrid
2021-01-27 22:00:54

在使用 javascript (jQuery) 填充 colModel 后,是否有一种方法可以用于覆盖/插入 colModel 中特定列的自定义函数“sorttype”?

我在这里找到了一个例子:http : //www.ok-soft-gmbh.com/jqGrid/CustomSorttype1.htm ,其中 sorttype 是使用初始设置实现的,但之后我需要对其进行更改。

尝试过:

var attName = grid.getGridParam("colModel")[1].name;
        grid.setColProp(attName, { sorttype: function (cell) {
            if (cell == '<div>x</div>') { return '0' } else { return '1' };
        }
        });

但不起作用。

1个回答

的使用sorttype作为函数可能是有用的jqGrid为任何本地数据类型或在使用的情况下loadonce:true的jqGrid paremter与“远程”的数据类型“JSON”或“XML”。如果需要,您可以sorttype动态更改任何列的 。

为您制作了新的演示来演示该功能。在开始时,网格将按“客户”列排序,包含的列将被解释为文本字符串。结果显示如下

在此处输入图片说明

我们选中复选框“设置自定义排序类型功能”网格将按显示在下一张图片上进行排序

在此处输入图片说明

为了实现这样的排序,我定义了函数

var myCustomSort = function(cell,rowObject) {
    if (typeof cell === "string" && /^test(\d)+$/i.test(cell)) {
        return parseInt(cell.substring(4),10);
    } else {
        return cell;
    }
}

以及复选框上的“更改”事件处理程序

$("#customsorttype").change(function() {
    var isChecked = $(this).is(':checked');
    if (isChecked) {
        cm.sorttype = myCustomSort;
    } else {
        cm.sorttype = "text";
    }
    grid.trigger("reloadGrid");
});

哪里grid$("#list")

如果再次单击复选框,sorttype:"text"将使用原始排序方法

@Brandon:对不起,我真的不明白你的意思。sorttype设计仅用于本地数据类型,我只能找到这个addLocalData方法。如果在您的情况下,该函数sorttype将使用远程数据类型调用,那么它一定是一个错误。为什么要对sorttype远程数据类型进行任何实验为什么你不在服务器上对包含所有 NULL 值的数据进行完整排序,应该怎么做?
2021-03-21 22:00:54
@Oleg 为什么对于在服务器上完成的默认单元格值排序,它能够正确检查空值(例如我的主题列工作正常),但对于具有 html 值的单元格,默认排序不排序空值。那么最好使用的 sorttype 是什么,我是否需要使用自定义 sorttype?
2021-03-25 22:00:54
@Oleg oic ...我认为 sorttype 可以根据数据源通过前端或后端实现。我不是在试验...我只是想通过标题单击排序对具有空/非空 html 值的列进行排序,但它不起作用。
2021-03-27 22:00:54
@Brandon:之前我是如何写给你的,sorttype它将仅用于jqGrid的本地数据类型,或者在使用loadonce:true带有“远程”数据类型“json”或“xml”的 jqGrid 参数的情况下对于没有 loadonce:true它的远程数据类型,将被忽略。在远程数据类型的情况下,服务器完全负责数据排序。服务器接收参数sidxsord定义所需的排序。因此,在您的情况下,排序的任何实现都必须在服务器上完成,否则您必须使用loadonce:true.
2021-03-31 22:00:54
我使用的是远程 json 数据类型,它不能加载一次(网格有时需要刷新)。基本上我想检查null并且单元格数据是html。我试过这个......但仍然试图让它在我点击排序标题文本时工作。annotCustomSort = function (cell, rowObject) { return parseInt(cell.length); } annotCol = grid.getGridParam("colModel")[2]; annotCol.sorttype = annotCustomSort;
2021-04-05 22:00:54