webentwicklung-frage-antwort-db.com.de

Wie wird der Wert der Daten in jqgrid aktualisiert?

Ich versuche, eine Zelle in Jqgrid beim Laden dauerhaft zu aktualisieren. Ich weiß, dass ich setCell verwenden kann, aber dies aktualisiert nur den Wert für diese Seite. Wenn ich zur Seite zurückkomme, wenn ich nicht explizit eine andere setCell für die Zelle durchführe, wird der alte Wert angezeigt. Ich habe auch setRowData ausprobiert, aber es scheint das gleiche zu tun. Ich verwende die Variable loadonce, da mein Ansatz darin besteht, 1) die Daten zu laden 2) einige Werte der Daten basierend auf einigen Kriterien zu ändern. Sollte ich loadonce verwenden, sollte es nicht möglich sein, eine Zelle dauerhaft in dieser Sitzung zu ändern?

AKTUALISIEREN:

Einfügen meines Codes, der keinen Fehler gibt, aber nicht alle Daten durchlaufen:

var set = 0;

....

gridComplete: function(data){
    setData();
},

....

beforeRefresh: function(data){
    set = 0;
},

....

function setData(){

if(set == 1) return;
... //create hash up here
  var dataArray = jQuery("#grid").jqGrid('getGridParam', 'data');
  var j = 1;
  for (var rows in dataArray) {
    var key = dataArray[rows].name;
    dataArray[rows].level = hashTable[key];
    j++;
  }
  alert(j);
}

Dabei werden nicht alle Elemente des Arrays, die lokal geladen sind, durchlaufen. Wenn die Seitengröße beispielsweise auf 30 eingestellt ist, gibt alert(j) 30 zurück, obwohl ich bereits viele Elemente lokal geladen habe. Wenn ich jedoch die Grafik aktualisiere, ist j die richtige Zahl. Warum ist das Verhalten von getGridParam in jedem Fall unterschiedlich?

14
WildBill

Wenn Sie loadonce: true verwenden, sollten Sie wissen, wo die lokalen Daten von jqGrid gespeichert werden. jqGrid bietet zwei Optionen: data und _index. data ist ein Array von Elementen, bei denen jedes Element die name -Eigenschaft als name-Eigenschaft der Spalten von colModel hat. Wenn Sie das Element anhand der ID (Zeilen-ID) suchen müssen, können Sie _index[rowid] für das Element mit der Zeilen-ID im Array data verwenden. Um die Daten in der Spalte 'myColumn' zu ändern, sollten Sie Folgendes tun:

// first change the cell in the visible part of grid
myGrid.jqGrid('setCell', rowid, 'myColumn', newValue);

// now change the internal local data
var dataArray = myGrid.jqGrid('getGridParam', 'data'),
    indexes = myGrid.jqGrid('getGridParam', '_index');
dataArray[indexes[rowid]].myColumn = newValue;

AKTUALISIERT: Sie können die dokumentierte getLocalRow -Methode verwenden, um die lokalen Daten zu ändern:

// first change the cell in the visible part of grid
myGrid.jqGrid('setCell', rowid, 'myColumn', newValue);

// now change the internal local data
myGrid.jqGrid('getLocalRow', rowid).myColumn = newValue;
31
Oleg

Für alle, die von Google hierher gekommen sind, hier eine aktualisierte Antwort!

wichtig ist der Index, den Sie erhalten können, wenn Sie die getInd-Methode aufrufen. Weil rowID! = Index von localRowData. (Gl. rowId: jqg204, Index: 5)

EDIT: Wenn "key: true" im colmodel gesetzt ist, können Sie Ihre eigene rowId festlegen (abweichend von meinem Beispiel "jqg ###", normalerweise eine PK aus einer Datenbanktabelle). 

var ind = myGrid.getInd(rowId);
var localRowData  = myGrid.jqGrid('getLocalRow', ind);
localRowData.myColumn = newValue;

hoffentlich hilft das!

0
fr4nk

Ich hatte ein ähnliches Problem:
Ich musste eine Zeile bei einer bestimmten Benutzeraktion aktualisieren (irrelevant).
Dafür musste ich die genaue Zeile des 'data'-Objekts kennen, auch nachdem die Tabelle etwas gefiltert wurde.
.__ Ich fand also einen Weg, um herauszufinden, welche Zeile geändert wurde - Ich habe eine RowID-Eigenschaft für jedes Element des 'data'-Objekts hinzugefügt, und zwar beim' loadComplete'-Ereignis:

loadComplete: function () {
            if (firstRun) {
                firstRun = false;
                var dataArray = $('#jqGrid').jqGrid('getGridParam', 'data');
                $(dataArray).each(function (index) {
                    dataArray[index].RowID = index + 1;
                });
            }
        }

Beim Formatierungscode konnte ich jetzt auf rData.RowID zugreifen, um die genaue Zeile zu identifizieren, in der die Aktion ausgeführt wurde, und um ihre 'Daten'-Darstellung abzurufen

0
Alonzzo2