2016-06-21 70 views
0

嗨,我使用的jqGrid与数据类型:“jsonstring”jqGrid的更新特定行

现在我想更新基于第一列中的值的特定行。 我的意思

jqGrid的定义

$("#grid").empty().jqGrid({ 
        datatype: 'jsonstring', 
        datastr: { rows: outputStr }, 
        colNames: ['EmpName', 'Val1', 'Val2'], 
        colModel: [ 
           { name: 'EmpName', classes: 'EmpName', index: 'EmpName', width: 100, header: 'Currency' }, 
           { name: 'Val1',classes: 'Val1', index: 'Val1', width: 160 }, 
           { name: 'Val2', classes: 'Val2',index: 'Val2', width: 50 }, 
jsonReader: { 
         repeatitems: false 
        }, 


        rowNum: 10, 
        pager: '#pager', 
        viewrecords: true, 
        hoverrows: false, 
        caption: "" 
       }).navGrid('#pager', 
        { search: true, edit: false, add: false, del: false, refresh: false }, {}, {}, {}, 
        { recreateFilter: true, overlay: true, multipleSearch: true, multipleGroup: true } 
       ); 

考虑我的网格数据,

 

    
    Johny 122 3123 
    Tom 3123 5856 
    Susan 124 434 
    Cetra 242 2111 
    

这是网格中的样本数据。现在有一个获取更新数据的功能,只是更新的数据不是整个网格数据。我的意思是当存在对“外贸协会”的更新,我收到更新“外贸协会”唯一

JS的功能看起来像

function getDetailUpdate(key, value) 
{ 
var data = JSON.parse(value); 
       var row = $('#grid tr:contains(' + key + ')'); //here I get I am getting update data for who, e.g. 'Cetra' 

       var rowVal = $(row).closest('tr').attr('id'); //Here I get the row id 
       for (let i in data) { 
        // Below statement is not working 
        $("#grid").jqGrid('setRowData', row, { 'Val1': data[1], 'Val2': data[0]}); 

//Below statement works and updates the changes but it is not updating in proper row cell, I have also set class names for the three td, and which value to update(which cell) I am getting in 'i') 
        $(row).closest('tr').children('td.' + i).text(data[i]); 
       } 
} 

任何帮助非常感谢。由于

+1

你可以访问行ID?最好的方法是使用它而不是黑客攻击htmls。 var rowData = $('#my-jqgrid-table')。jqGrid('getRowData',rowId); rowData.Val1 ='12321'; $('#my-jqgrid-table')。jqGrid('setRowData',rowId,rowData); –

回答

1

而不是使用

var row = $('#grid tr:contains(' + key + ')'); 

我在用的

var row = $("td").filter(function() { 
         return $(this).text() == key; 
        }).closest("tr"); 

所以这是工作这样做,通过找到TR的ID的精细

替代方法,如建议@Amete祝福,是一个更好的方法。

var rowId = $(row).closest('tr').attr('id'); 
var rowData = $('#my-jqgrid-table').jqGrid('getRowData', rowId); 
rowData.Val1= '12321'; 
$('#my-jqgrid-table').jqGrid('setRowData', rowId, rowData) 

希望它可以帮助别人