2016-06-21 106 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) 

希望它可以幫助別人