JQGrid 自动隐藏单元格中带有 false 的行

JQGrid automatically hide a row with a false in a cell

如果行中的某个单元格具有错误值,我会尝试隐藏该行,到目前为止,我已尝试使用这样的格式化程序:

$("#list").jqGrid({
            //datatype: 'clientSide',
            colNames: ["Id", "Descrizione", "Data Vendita", "Disabilitato", "PISTA", 
                       "Piano Tariffario", "Data Validità Piano Tariffario", 
                       "PROMO", "Data Validità Promo", "CANONE CLIENTE NETTO MESE", 
                       "Vendibile", "Migrato"],
            colModel: [
                { name: "id"},
                { name: "descrizione", editable: true},
                { name: "dataInizVendita", editable: true, formatter:vendita},                          
                { name: "disabilitato", editable: true},
                { name: "pista", editable: true},
                { name: "pianoTariffario", editable: true},
                { name: "dataInizPiano", editable: true, formatter:piano},              
                { name: "promo", editable: true},
                { name: "dataInizPromo", editable: true, formatter:promo},
                { name: "canoneNetto", editable: true},
                { name: "disponibilita", editable: true, formatter:mostra},
                { name: "migrato", editable: true, width:150, sortable: false, resizable:false, formatter:bottone}          
            ],
            formatter: 'date', 
            formatoptions: { srcformat: 'd/m/Y', newformat: 'd/m/Y'},
            sortname: "id",
            sortorder: "asc"

        })

我关心的格式化程序是mostra,如果disponibilita为false,它必须隐藏行!

function mostra (cellvalue, options, rowObject)
{               

    if(rowObject.disponibilita == false)
    {               
        $("#"+rowObject.id).hide();
    }
    $("#list").trigger("reloadGrid");
    return rowObject.disponibilita;
}

我也尝试过使用 delRowdata,但它并没有删除它,而且它可以看到它何时为假,何时为假,因为 if 函数工作得很好

另一种方法是使用 each 函数扫描 tr 和 td 数据并在 false 时隐藏

$('.hidefalse').click(function() {

$("#grid tr").each(function () {
var thisrow = $(this);

    $('td', this).each(function () {
        var value = $(this).text();

        if (value == 'false') {
            $(thisrow).fadeOut();
        }
     })

})

})

Demo

要自动化,去掉点击功能

Demo

最好删除数据,在disponibilita之前false值数据将由 jqGrid 处理。在 datatype: "local" 的情况下,应该只修改输入数据,然后使用 data 参数修改输入。如果从服务器加载数据,可以使用 beforeProcessing 回调来修改从服务器返回的数据。

只有在由于一些额外的原因无法实现上述场景时,才可以使用rowattr以下形式的回调

rowattr: function (item) { // !rowObject.disponibilita in your case
    if (item.closed) {
        return {style: "display:none;"};
    }
}

参见 the demo 或 "class" 形式:

rowattr: function (item) {
    if (item.closed) {
        return {"class": "my-hide"};
    }
}

参见 another demo。您可以看到这两种解决方案都有效,但页面大小不正确。