【问题标题】:jqGrid filterToolbar only works with some columnsjqGrid filterToolbar 仅适用于某些列
【发布时间】:2020-10-24 23:13:16
【问题描述】:

当我尝试在“Erstellt Von”列中搜索字符串Test 时,我没有得到任何结果。控制台也没有错误。

这是我使用的代码部分:

var colUserTemplate = {
    width: 160, align: 'left',
    formatter: function (cellvalue, options, rowObject) {
        return "Test";
    }
}

在另一列中,过滤效果很好:

以下是网格的加载方式和filterToolbar

function loadGrid(listname, query, divname, colnames, colmdodel, showFilter, showExcelExport) {

    $("#" + divname).jqGrid({
        datatype: function () { loadGridData(listname, query, divname); },
        colNames: colnames,
        colModel: colmdodel,
        height: "100%",
        loadonce: true,
        rowNum: 9999,
        gridComplete: function () {
            $("#" + divname + "no").html(" [" + $("#" + divname).jqGrid('getGridParam', 'records') + "]");
            $("#" + divname).jqGrid('setGridParam', { datatype: 'local' });
        },
        ondblClickRow: function (rowid, iRow, iCol, e) {
            onDoubleClickGrid(rowid, iRow, iCol, e, divname, listname);
        }
    });

    if (showFilter) {
        $("#" + divname).jqGrid('filterToolbar', {
            autosearch: true,
            stringResult: false,
            searchOnEnter: true,
            defaultSearch: "cn",
        });
    }
}

我尝试过使用

if (showFilter) {
    $("#" + divname).jqGrid('filterToolbar', {
        autosearch: true,
        stringResult: true,
        searchOnEnter: true,
        defaultSearch: "cn", ignoreCase: true
    });
}

但它并没有改变任何东西。

如果你想看看,here's the full code.

数小时以来一直在尝试解决此问题,感谢您提供任何帮助!

编辑:

写这篇的时候:

var thegrid = $("#" + divname)[0];
console.log("data.d.results: " + data.d.results);
thegrid.addJSONData(data.d.results); //Binding data to the grid
console.log("thegrid:" + thegrid.innerHTML);

我得到以下结果:

这是展开的对象:

【问题讨论】:

  • 这是因为您使用了自定义格式化程序。该格式化程序返回您自己的值,而本地搜索是对存储在数据数组中的本地数据执行的。换句话说 - 网格不是在网格中显示的值上执行搜索,而是在这些存储到数据数组中的值上执行搜索。
  • 感谢您的回复。那么我该怎么办呢?
  • 将这些值首先放入响应中。您将数据类型用作函数,因此将格式化的值放在这里。
  • 我究竟要写什么才能将格式化的值放入数据类型函数中?您能写一个答案,以便我将其标记为正确吗?

标签: javascript jquery sharepoint filter jqgrid


【解决方案1】:

你使用一个函数来加载数据:

function loadGridData(listname, query, divname) {

$.ajax({
    url: "/tools/AKG/_api/web/lists/getbytitle('" + listname + "')/Items?" + query,
    type: "GET",
    headers: { "Accept": "application/json;odata=verbose" },
    success: function (data, textStatus, xhr) {
        var thegrid = $("#" + divname)[0];
        thegrid.addJSONData(data.d.results); //Binding data to the grid
    },
    error: function (xhr, textStatus, errorThrown) {
        alert("error:" + JSON.stringify(xhr));
        $('#' + divname + 'records').html(" [0]");
    }
});
}

在成功函数 data.d.results 中包含您的网格数据。在将此数据放入该列的 addJSONData 循环中并更改其值之前,如果可能的话,最好在服务器上执行此操作

【讨论】:

  • 我知道我可以使用console.log("thegrid:" + thegrid.innerHTML); 打印出网格数据,但我不明白您所说的“循环该列并更改其值”是什么意思
  • data.d.results 是包含网格数据的对象数组(更好的对象)。通常这个对象有行,即网格行。每行包含一组名称:值对,对应于网格单元格。如果您在 addJSONData 之前执行 console.log(data.d.results),您将看到将被放入网格的源。因此,在将其放入网格之前,您可以在此处更改值。
  • 对不起,我无法从中得到任何东西
  • 您能否在函数 loadGridData 中的 thegrid.addJSONData 之前做一个 console.log(data.d.results) 并给我一个部分或演示结果?
  • console.log( data.d.results ) 导致[object Object],[object Object],但我编辑了帖子。 (见上文)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 2012-10-30
  • 2020-10-21
  • 2019-04-11
  • 2023-03-31
相关资源
最近更新 更多