2016-05-26 8 views
0

Ich habe ein Problem mit jqGrid 4.6.0 Wenn ich versuche, die Zeilendaten zu erhalten, ändert jede Daten in eine Zeichenfolge muss ich sie analysieren, um die tatsächlichen Int oder Boolean Werte, was seltsam ist, dass, wenn ich die rowobject in einem benutzerdefinierten Formatierer siehe rowData JqGrid getRowdata gibt Zelle Wert in einer Zeile als Zeichenfolge

Hier ist der Beispielcode und jsfiddle Link für die Probe richtig

scheint, ich

var myformatter = function (cellval, options, rowObject) 
    { 
// rowObject is correct here {id: 1, Name: "test1", IsActive: true, Count: 10} 
    var active = rowObject.IsActive;// here active is true/false which is good 
    var count = rowObject.Count; // here count is 10,20,30 which is good 
    if(active) 
    { 
     // do what ever 
    } 
     return cellval; 
    } 
    var mydata = [ 
     {id:1, Name: "test1", IsActive: true, Count: 10}, 
     {id:2, Name: "test2", IsActive: false, Count: 20}, 
     {id:3, Name: "test2", IsActive: false, Count: 30} ]; 

     var grid = $("#list").jqGrid({ 

       datatype: "local", 
       data: mydata, 
       height: "auto", 
       colNames: ['id', 'Name','Is Active','Count'], 
       colModel :[ 
        {name:'id', index:'id', width:55}, 
        {name:'Name', index:'Name', width:90}, 
        {name:'IsActive', index:'IsActive', width:90, editable: true ,formatter:myformatter}, 
        {name:'Count', index:'Count', width:90, editable: true} 

       ], 
       pager: '#pager', 
       rowNum:10, 
       rowList:[10,20,30], 
       sortname: 'idcustomers', 
       sortorder: 'asc', 
       viewrecords: true, 
       gridview: true, 
       caption: 'Customers', 
       cellEdit: true, 
       cellsubmit: 'clientArray', 
        }); 
var row = $('#list').jqGrid('getRowData', 1); 

// row is: {id: "1", Name: "test1", IsActive: "true", Count: "10"} 
// What I was expecting {id: 1, Name: "test1", IsActive: true, Count: 10} 

Antwort

2

Sie erstellt getLocalRow Methode verwenden, sollten statt getRowData um Ihr Problem zu lösen. Es ist wichtig zu verstehen, dass getRowData den Text von <td> Element erhalten. Daher ist der Standardtyp der Daten immer ein String. Die Methode getLocalRow erhalten Sie einfach den Verweis auf internes Element data Array mit Originaldaten.

Noch eine Bemerkung: Es wird empfohlen, immer unformatter (unformat) Callback-Formatierer zu definieren, wenn man einen benutzerdefinierten Formatierer definiert.

Man kann sehen, dass Sie die Bearbeitung von Daten verwenden. Die Standardbearbeitung ändert den Typ der Änderungsdaten. Somit haben Sie das gleiche Problem wie zuvor. Free jqGrid ermöglicht es, das Problem zu beheben, indem Sie convertOnSave Rückruf für die Spalte angeben. Siehe the wiki Artikel für weitere Details. Zusätzlich unterstützt jqGrid einige Standard-Spaltenvorlagen, was die Datenkonvertierung für Boole'sche, Integer und Zahlen vereinfacht. Ein kann die Eigenschaft template: "integer" in der Spalte Count hinzufügen (siehe die Vorlagendefinition here) und template: "booleanCheckbox" hinzufügen (siehe here). Sie können zum Beispiel the demo debuggen und überprüfen, ob die Typen der Eigenschaften von data nach der Bearbeitung korrekt gehalten werden.

+0

danke das hat funktioniert. In Bezug auf deine Anmerkungen ist dies eine schnelle und schmutzige Demo, die ich für jemanden erstellt habe, den du leicht beantworten kannst. Aber mein richtiger ist viel komplizierter und hat alles, was er bezüglich der Formatierung und anderer Dinge benötigt. –

+0

@AmeteBessed: Gern geschehen! – Oleg