Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 免费jqGrid(4.15.4)、服务器过滤器、客户端排序和分页?_Javascript_C#_Free Jqgrid - Fatal编程技术网

Javascript 免费jqGrid(4.15.4)、服务器过滤器、客户端排序和分页?

Javascript 免费jqGrid(4.15.4)、服务器过滤器、客户端排序和分页?,javascript,c#,free-jqgrid,Javascript,C#,Free Jqgrid,试图基于多搜索/筛选器从服务器加载数据,但在客户端执行排序和分页。我发现有一些帖子说,只需在beforeSearch方法中将数据类型设置回原始值即可 我已经尝试过了,它确实在服务器上执行并返回了正确的数据。然而,第二次过滤时,它似乎从服务器获取数据,但随后在jqgrid代码的第4429行中被删除,如下所示。你对如何实现这个目标有什么想法吗 Ln 4429:p.lastSelectedData=query.select() 网格定义: $element .jqGrid({

试图基于多搜索/筛选器从服务器加载数据,但在客户端执行排序和分页。我发现有一些帖子说,只需在
beforeSearch
方法中将数据类型设置回原始值即可

我已经尝试过了,它确实在服务器上执行并返回了正确的数据。然而,第二次过滤时,它似乎从服务器获取数据,但随后在jqgrid代码的第4429行中被删除,如下所示。你对如何实现这个目标有什么想法吗

Ln 4429:p.lastSelectedData=query.select()

网格定义:

$element
    .jqGrid({
        cmTemplate: { search: true, searchoptions: { attr: { placeholder: "filter..." }, clearSearch: true }, sortable: true, align: "center" },
        colModel: [
            { name: "Id", key: true, hidden: true, searchoptions: { searchhidden: true, sopt: ["eq"] } },
            { name: "TransmissionId", label: "Transmission Id", searchoptions: { sopt: ["eq"] } },
            { name: "Name", label: "Name", searchoptions: { sopt: ["cn"] } }
        ],
        datatype: "json",
        loadonce: true,
        height: "auto",
        ignoreCase: true,
        pager: $("#" + pagerId),
        pgbuttons: true,
        pginput: false,
        rowList: [10, 25, 50],
        rowNum: 10,
        toppager: true,
        url: "url here",
        loadComplete: function (data) {
            if (this.p.datatype === "json") {
                setTimeout(function () {
                    $element.trigger("reloadGrid", [{ page: 1 }]);
                }, 50);
            }
            return data;
        },
        viewrecords: true
    })
    .jqGrid("filterToolbar", {
        autosearch: true,
        defaultSearch: "cn",
        beforeSearch: function () {
            $element.setGridParam({ datatype: "json", page: 1 });
        }
    })
    .jqGrid("navGrid", "#" + pagerId, {
        edit: false,
        add: false,
        del: false,
        refresh: false,
        view: false,
        cloneToTop: true
    });

我已经修剪了网格,试图验证这不是导致此问题的自定义逻辑。网格确实启用了
多重搜索
。但是上面没有定义。

如果我正确理解您的问题,那么您应该将
forceClientSorting:true
loadonce:true
结合使用。它强制从服务器加载数据后,将对从服务器加载的数据进行排序、筛选和本地分页。因此,您可以删除当前使用的
loadComplete
。请参见演示

此外,您还可以添加
搜索
属性,其中包括
过滤器工具栏
搜索网格
的所有选项:

searching: {
    autosearch: true,
    defaultSearch: "cn",
    beforeSearch: function () {
        var p = $(this).jqGrid("getGridParam"), // get reference to all parameters
            filters = JSON.parse(p.postData.filters);
        p.datatype = "json";
        // one can here analyse filters, modify it or clear it as
        p.postData.filters = "";
        // one can set any other parameters, which will be sent to the server
        // by using p.postData.param1 = "value1";
        // which will sent param1=value1 to the server.
    }
}
通常,在搜索之前,您也可以在当前的
中执行相同的操作


更新:在处理回调之前,您可能应该使用
<在从服务器接收数据后,将直接调用code>beforeProcessing
。在回调内部,您可以清除所有
p.postData.filters
(到
“”
)和
p.search
(将其从
true
更改为
false
)。因此,jqGrid将尝试通过
postData对本地进行筛选。筛选从服务器返回的数据。

我只希望排序/页面客户端。我打算发送到服务器以将不同的数据集返回到客户端的筛选器。@XBiLe:我仍然不理解您当前的问题
filterToolbar
填充
postData。在搜索之前过滤
并调用
。您可以在
postData
中进行任何更改。然后
filterToolbar
设置
search:true
并触发
reloadGrid
。如果
数据类型
“本地”
更改回
“json”
,那么jqGrid将向服务器发送
postData
(网格的
url
)。因此,您可以完全自定义将发送到服务器的数据。是你问的吗?对不起,我不想让你搞糊涂。目标是使用过滤器从服务器查询新数据集,但在浏览器上本地分页和排序。问得差不多。我的问题是,第二次从服务器获取数据时,方法
addLocalData
会触发
query.select()
,从而删除新的数据集。我正在逐步进行评估,但看起来execute
match
不为空(Ln 2034)@XBiLe:如果没有演示,很难帮助您,因为演示再现了问题。行
p.lastSelectedData=query.select()肯定不是问题的根源。可能您还应该在处理
回调之前使用
。它将在从服务器接收数据后直接调用。在回调内部,您可以清除所有
p.postData.filters
(到“”)和
p.search
(将其从
true
更改为
false
)。因此,jqGrid不会尝试通过
postData进行本地筛选。筛选从服务器返回的数据。我在jqGrid JS中找到了导致数据丢失的原因。这是jlinq处理,我的一个筛选字段是bool,在求值过程中它会执行
String(jQuery.jgrid.getAccessor(这个,'issucess')| |。“).toUpperCase()
,由于
false
bool筛选值,它会导致一个空字符串。