如何在免费的 jqgrid 4.15.4 中重新加载数据

Posted

技术标签:

【中文标题】如何在免费的 jqgrid 4.15.4 中重新加载数据【英文标题】:How to reload data in free jqgrid 4.15.4 【发布时间】:2019-01-01 08:24:24 【问题描述】:

我有一个关于免费 jqgrid 的问题。我的 jqgrid 可以很好地加载所有数据。我已经明确给出了一个下拉和搜索按钮。当我尝试通过选择下拉菜单并单击搜索按钮进行搜索时,新数据未加载到现有网格中。

这是我的小提琴:https://jsfiddle.net/x3fger4z/。

在页面加载时,我使用的是这个 url:'/MajorsView/GetAllData',但是点击按钮后我想从另一个 url 加载。

下面是我的搜索按钮,实际上我正在成功获取数据,但它没有反映在网格上:

<input type="button" onclick="return myfunction();" id="btnFlagStatus" value="Search" class="btn btn-primary" />

function myfunction() 
 var gendarVal = $("#gendarFlagsEnum option:selected").text();
        var URL= "/MajorsView/GetFemaleData?searchKey=" + gendarVal;
        $.ajax(
            type: "GET",
            url: URL,
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(gendarVal),
            datatype:"json",
            success: function (data) 
                //$("#grid").setGridParam( url: URL )
                $("#grid").trigger('reloadGrid');

            ,
            error: function () 
                alert("error");
            
        )

我尝试从这些中获取参考,但无济于事

How to filter the jqGrid data NOT using the built in search/filter box how to reload jqgrid in asp.net mvc when i change dropdownlist jQuery button click refresh of jqGrid only firing once

【问题讨论】:

您所包含的演示jsfiddle.net/x3fger4z 似乎与您的问题无关。哪个datatype 有你的网格? $("#grid").setGridParam( url: URL ) 行在您的代码中得到推荐。为什么?您当前的代码就 Ajax 请求直接URL 加载数据,但如果您不使用服务器响应。不会使用success 回调的data 参数。如果没有任何知识(知道选项)如何使用 jqGrid,很难为您提供帮助。 嘿奥列格,我在问题中添加的小提琴是我的网格在我的机器上的样子。我的网格有数据类型:json 和 loadonce:true。从给定的函数中,我获得了 ajax 成功的数据。但是数据没有加载到现有网格中。有了这条线,我认为数据会加载到网格中,但它没有用。 $("#grid").setGridParam( url: URL ) 澄清问题:我在控制器中有两种方法,我从中获取页面加载的所有数据 ('/MajorsView/GetAllData',) 。另一种操作方法是我传递给上述函数的方法,它应该在同一网格中显示过滤的记录。但是网格不会刷新新的(过滤的)记录。 例如在页面加载时我有 5 条记录,但是当我从显式按钮单击进行搜索时,这仅显示网格中过滤的记录。再次试图明确这一点,在我的代码中,我有两种不同的方法,一种带来所有数据,另一种只带来过滤数据。我希望这能更好地澄清。顺便说一句,感谢奥列格 :) 【参考方案1】:

如果您使用datatype: "json" 和一些url,那么您只需将url 更改为另一个值并触发reloadGrid。不需要进行手动 Ajax 请求。如果您另外使用loadonce: true 选项,则网格的datatype 将更改为"local" 以处理排序、分页和过滤本地。每次排序、分页和过滤都只不过是用另一个参数(如pagesortnamepostData.filters)重新加载具有datatype: "local" 的网格。因此,要从服务器重新加载网格数据,必须将datatype 恢复为初始值(在您的情况下为"json")。因此您可以使用

var p = $("#grid").jqGrid("getGridParam"); // get reference to all parameters of jqGrid
p.url = "/MajorsView/GetFemaleData?searchKey=" + encodeURIComponent(gendarVal)
$("#grid").trigger("reloadGrid",  fromServer: true );

或者 ole 可以直接重置datatype(使用p.datatype = "json";),但fromServer: true 的使用在其他情况下可能会有所帮助,并且在我看来它使代码更具可读性。有关更多信息,请参阅the old answer 的更新部分。

【讨论】:

您能否对第一句话(在第一个逗号之后)提供更多见解:然后您可以将 url 更改为另一个值并触发 reloadGrid。不需要手动发出 Ajax 请求。 您的意思是动态更改 url 吗?如果是,那么任何示例答案链接。当我应用两个具有不同 url 的 jqgrid 时。 @Chandan:我的意思是你应该从myfunction 中删除 Ajax 调用,而只使用我的答案中的代码。它设置url 参数,然后使用reloadGrid fromServer: true 参数。应该从新的url 重新加载网格。 嘿@Oleg,我也做了同样的事情,但是 encodeURIComponent(gendarVal) 在控制器操作方法上作为 null 传递。 @Chandan:你之前初始化过gendarValgendarVal = $("#gendarFlagsEnum option:selected").text())吗? encodeURIComponent 方法是标准的 javascript 方法,它可以安全地使用 URL 中的特殊字符。如果gendarVal 没有特殊字符,则可以使用"/MajorsView/GetFemaleData?searchKey=" + gendarVal,但encodeURIComponent(gendarVal)gendarVal 更安全。 我得到了那个奥列格,谢谢。我没有将 searchKey 作为参数传递给动作控制器方法,而是传递了 genderVal。在将值传递给 url 中的 searchKey 后没有范围。我已将此答案标记为已接受,但不会反映其他人。所以可能版主可以将此答案标记为已接受。非常感谢 Oleg,你太棒了!

以上是关于如何在免费的 jqgrid 4.15.4 中重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载网格的情况下将行添加到下一页中的 jqGrid?

无法使用新的json数据重新加载JQGrid

如何在jqgrid分组中保留展开/折叠状态?

如何利用jqGrid表格方法重新设置caption属性值

如何利用jqGrid表格方法重新设置caption属性值

将样式应用于jqgrid