jqGrid filterToolbar 仅适用于某些列

Posted

技术标签:

【中文标题】jqGrid filterToolbar 仅适用于某些列【英文标题】:jqGrid filterToolbar only works with some columns 【发布时间】: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);

我得到以下结果:

这是展开的对象:

【问题讨论】:

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

以上是关于jqGrid filterToolbar 仅适用于某些列的主要内容,如果未能解决你的问题,请参考以下文章

jqGrid filterToolbar():无法读取未定义的属性“length”

jQgrid filterToolbar 因 searchOnEnter 而失败

JQGrid filterToolbar搜索输入列合并

jqGrid 工具栏搜索仅适用于前 20 行。分页为 20,40,60

Jquery 网格仅适用于要加载的 8400 行。

如何在适用于 IE7、IE8 和 FF 的 jqGrid 上实现自动换行