jqGrid-自定义过滤有效,但在模式窗口中重新打开网格后无效

jqGrid - Custom filtering works but not after reopening a grid in a modal window

本文关键字:新打开 网格 无效 窗口 模式 过滤 自定义 有效 jqGrid-      更新时间:2023-09-26

我有一个自定义过滤功能,它通过传递自定义url并重新加载网格数据

function filter_grid(filter) {
    grid = $(filter).parents('.ui-jqgrid-view').find('.grid');
    /* build the url in here*/
    $(grid).setGridParam({loadonce:false, datatype:'json'});
    jQuery(grid).setGridParam({url:myurl}).trigger("reloadGrid");
    $(grid).setGridParam({loadonce:true});
}

这可以很好地工作,并按预期过滤数据。然而,我允许用户在模式窗口中打开网格,这在您第一次打开模式窗口时也会起作用,但如果您关闭窗口并重新打开它…过滤失败。我在控制台中没有看到错误。。。只是重新加载似乎从未发生过。有什么建议吗?


澄清

简而言之,每个网格都附有一个选择菜单。您可以在该菜单中选择一个选项,它将通过filter_grid功能用过滤后的数据重新加载网格。它通过用一个新的url重新加载网格来重新加载,这个url传递一些参数来过滤数据。

在gridComplete事件中,我将一个select输入元素(稍后填充)附加到页面上的每个网格。每个都有一类"过滤器":

$("#grid1 .ui-jqgrid-titlebar:eq(1)").append("<select id='pdd_user' name='filter_user' class='category_select filter'><option value=''>All</option></select>")

我观察点击过滤器类:

$('.filter').live('change', function() {
        filter_grid(this);
    });

正如你所看到的,这调用了filter_grid函数(我在上面第一次编辑问题时包含的函数),这就是用过滤后的数据重新填充网格的方法:

jQuery(grid).setGridParam({url:myurl}).trigger("reloadGrid"); 

我将其设置为loadonce:false,因为网格在最初创建时(出于本地排序目的)被设置为loadonce:true,所以我将其重新设置为loadonece:false,用新的url和params重新加载网格,然后将其设置回loadonce:true,以便再次启用本地排序。

我不完全理解你的问题,但我希望我能帮助你找出代码中的错误。我认为您应该删除对jqGridloadonce选项的任何操作。这是不必要的,也是危险的。要使用服务器数据重新加载网格,只需将datatype设置为'json',然后使用.trigger("reloadGrid", [{page: 1, current: true}]);重新加载网格(有关详细信息,请参阅此处)。参数current: true有助于在重新加载后在网格中找到所选行时保持该行。如果使用数据分页,参数page: 1可以提供帮助。例如,如果用户选择了第二个页面,然后reloadGrid将启动,它将请求服务器也加载过滤结果的第二个页。因此,在寻呼机中可以有空的网格和页码2。对于setGridParamreloadGrid的上述参数,将页码重置为1在这种情况下会有所帮助。

设置loadonce: false的问题可能是,如果在设置loadonce: true之前处理网格的重新加载。在这种情况下,网格中不会填充任何本地数据。因此,应永久设置选项loadonce: true

如果您使用带有本地数据排序的服务器端分页,我还建议您阅读此答案。