JQGrid发布列的值而不是ID

时间:2016-03-31 10:20:22

标签: javascript jquery jqgrid

我尝试编辑记录但不是发送ID列的值,而是继续发送表的ID,我不关心。这是代码:

$("#list1").jqGrid({
                datatype: 'clientSide',             
                colNames: ["Id", "Id prodotto", "Nome prodotto", "Quantità",
                           "Pista", "Politica", "Attivazione", "Bundle",
                           "Scontato", "Valore sconto", "Twin card", "DN",
                           "ISDN", "Disabilitato"],
                colModel: [
                    { name: "id", hidden:true, key:true},
                    { name: "idprodotto", hidden:true},             
                    { name: "prodotto"},
                    { name: "quantita"},
                    { name: "pista"},
                    { name: "politica"},
                    { name: "attivazione", formatter: "checkbox"},
                    { name: "bundle", formatter: "checkbox"},
                    { name: "sconti", formatter: "checkbox"},
                    { name: "scontival"},
                    { name: "card", formatter: "checkbox"},
                    { name: "numero"},
                    { name: "isdn", formatter: "checkbox"},
                    { name: "disabilitato", width:100, sortable: false, resizable:false, hidden:true }
                ],  
            sortname: "prodotto",
            sortorder: "asc",
            pager: "#pager1"
            })          
            .navGrid('#pager1', {add: false, del: false});

这可能有助于说在这个页面中有两个表,这里是第一个表:

$("#list").jqGrid({
                datatype: 'clientSide',
                colNames: [
                           "Id",
// "Id cliente",
                         "Numero",  "RagSociale cliente", "Anno",
                           "Data di ordine", "Id agente", "Nome agente", "Cognome agente",
                           "Id agenzia", "RagSociale agenzia", "Id utente", "Nome utente", 
                           "Data d'inserimento", "Note", "Disabilitato",""],
                colModel: [
                    { name: "id", hidden:true, key:true },
//                      { name: "idCliente"},   
                    { name: "numero"},  
                    { name: "ragSocCliente"},
                    { name: "anno"},
                    { name: "dataOrdine"},              
                    { name: "idAgente"},
                    { name: "nomeAgente"},
                    { name: "cognomeAgente"},
                    { name: "idAgenzia"},
                    { name: "ragSocAgenzia"},
                    { name: "idUser"},
                    { name: "nomeUser"},                                            
                    { name: "dataInserimento"},             
                    { name: "note"},                
                    { name: "disabilitato", width:100, sortable: false, resizable:false, hidden: true},
                    { name: "dataModifica", width:100, hidden: false}
                ],

                sortname: "dataModifica",
                sortorder: "desc",
                pager: "#pager",
                onSelectRow: function (id) {                    
                    sessionStorage.setItem("idEdit", $("#list").jqGrid('getCell', id, 'id'));
                    $.get("getCorpoByNumero.do", {                          
                        id: sessionStorage.getItem("idEdit")
                    },  function (data) {
                            $("#list1").clearGridData();
                            for (var i = 0; i < data.length; i++) {                     
                                var corpo = data[i];                                                
                                $("#list1").addRowData((i+1), corpo);

                            }
                    });

                }
            })

1 个答案:

答案 0 :(得分:2)

目前还不清楚你想要POST而不是ID的“列值”?哪个网格有问题?您使用navGrid作为网格#list1 ,不用指定,editurl看起来不正确。

使用addRowData填充第二个网格非常糟糕!特别糟糕的是使用值0,.. data.length作为rowid而不是从服务器返回的id(来自"getCorpoByNumero.do")。更改网格的data参数并按.trigger("reloadGrid")重新加载它会更有效:

onSelectRow: function (id) {                    
    sessionStorage.setItem("idEdit", id);
    $.get("getCorpoByNumero.do", {                          
        id: id
    }, function (data) {
        var $grid1 = $("#list1"), p = $grid1.jqGrid("getGridParam");

        p.data = data;
        $grid1.trigger("reloadGrid");
    });
}

此外,如果您在页面上创建多个网格,则严格建议使用idPrefix。 jqGrid的标准行为是将网格的所有id元素的<tr>属性(设置rowid)设置为输入数据的id属性的值。如果两个网格具有相同的id值,则它可以生成id dupplicates。例如,在idPrefix: "g1_"网格中使用#list1会强制将"g1_"前缀添加到网格的所有id值中。它修复了可能的id重复项。在将数据发送到服务器期间,前缀将被自动删除。

最后一句话。我建议您从网格中删除不需要的{ name: "id", hidden:true, key:true }列。 rowid将自动使用输入数据的id属性。您可以在$("#list").jqGrid('getCell', id, 'id')回调中仅使用id而不是onSelectRow,而是拥有相同的数据。以同样的方式,您可以删除其他隐藏列(disabilitatoidprodotto)。内部数据仍然具有所有输入属性,您可以使用getLocalRow来访问数据。

我建议将datatype: 'clientSide'替换为更常见的datatype: 'local',并验证您使用的jqGrid版本。我建议您使用free jqGrid的最新版本(4.13.1)。这是我开发的jqGrid的用法。