javascript - 对列进行排序显示 jqGrid 中的隐藏行

标签 javascript jquery jqgrid

我有一些像这样隐藏的行:

$("#"+rowid).hide();

我的问题是,当用户单击对列进行排序时,隐藏的行会重新出现。有办法避免这种情况吗?

编辑

我将尝试用代码示例进一步解释一下我所做的事情。 我开始使用此参数(并且没有数据)创建网格。

var params = {
    datatype: "local",
    data: [],
    caption: "Grid",
    colNames:[ "Column A", "Column B" ],
    colModel:[
        { name:"colA", key: true },
        { name:"colB" } 
    ]
};

由于某些原因,我重新加载接下来的网格数据,如下所示:

$("#myGrid").jqGrid("clearGridData")
        .jqGrid("setGridParam", { data: myDatas })
        .trigger("reloadGrid");

我有带有听众的复选框,就像这样:

$("#checkbox1").on("change", onCheckbox1Changed);

function onCheckbox1Changed() {
  var rowid = ...;
  var datas = $("#myGrid").jqGrid("getRowData");

  for(var key in datas) {
    if(datas[keys].colB === "" && $("#checkbox1").val() === true) {
      $("#"+rowid).show();
    } else if(datas[keys].colB === "" && $("#checkbox1").val() === false) {
      $("#"+rowid).hide();
    }
  }
}

这段代码的工作方式符合我的要求。根据复选框隐藏/显示行。问题是当我单击某一列对其进行排序时,隐藏的列重新出现。

编辑2

我可以强制网格在排序后隐藏行。但我没有找到在哪里可以找到像“afterSort”这样的事件。有“onSortCol”,但它是在排序之前调用的。

解决方案是使用“loadComplete”强制执行。像这样:

var params = {
   // ...
   loadComplete: onLoadComplete
}

function onLoadComplete() {
    onCheckbox1Changed();
}

我试过了,有效。但我不太“喜欢”这个解决方案。

最佳答案

我发现显示数据页面后隐藏一些行不是最佳选择。主要缺点是显示的行数。仅当您需要显示一页数据时,您才可以安全地使用 loadComplete 内部的 $("#"+rowid).hide(); 方法。即使在这种情况下,人们也可以看到一些不正确的信息。例如,可以使用 viewrecords: true 选项,将“View 1 - 10 of 12”等文本放置在寻呼机的右侧。

我个人建议您过滤数据。您需要向网格添加 search: true 选项并指定 postData.filters,这排除某些行的显示:

search: true,
postData: {
    filters: {
        groupOp: "AND",
        rules: [
            { field: "colA", op: "ne", data: "rowid1" },
            { field: "colA", op: "ne", data: "rowid2" }
        ]
    }
}

如果您想从旧的 jqGrid 4.6 升级到免费 jqGrid 的当前版本 (4.13.6),那么您可以使用 "ni" (NOT IN) 操作:

search: true,
postData: {
    filters: {
        groupOp: "AND",
        rules: [
            { op: "ni", field: "id", data: "rowid1,rowid2" }
        ]
    }
}

在这两种情况下,jqGrid都会首先根据过滤规则过滤本地数据,然后显示当前页的数据。因此,您将获得完美的结果。

对此类网格进行排序不会改变过滤器。

关于javascript - 对列进行排序显示 jqGrid 中的隐藏行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892486/

相关文章:

javascript - 将 rowdata 标记从 javascript 传递到 servlet

javascript - 调用 Backbone.Model.Save 将 child-Backbone.Model 转换为对象?

Javascript:在字符串中插入变量

javascript - JQuery Mobile 点击事件不起作用,具体取决于 HTML 中的元素位置

java - jqgrid 只读组合框

javascript - free-jqgrid:保存、加载和应用过滤器数据(包括过滤器工具栏文本和页面设置)的更简单方法?

checkbox - 如何使用 Firebug 跟踪不显眼的 onclick

javascript - 在字符串中保存\n符号(JS)

javascript - 我如何从服务器端java代码调用Javascript函数并向其传递数据?

jquery - 带有照片的交互式平面图网站