2010-10-14 5 views
19

Wie können Sie ein Raster erstellen, aber keine Daten laden? Wenn ich die Option url weglasse, wird der Rückruf loadError ausgelöst.jqGrid - Wie wird das Grid so eingestellt, dass Daten zunächst NICHT geladen werden?

Derzeit setzen wir url:NoData.json, wobei NoData.json eine statische Datei ohne Zeilen darin ist.

Problem ist in unserem loadComplete Rückruf wir möchten dipslay eine Nachricht, wenn das Raster keine Daten enthält - außer wir wollen diese Nachricht nicht beim ersten Laden angezeigt werden. Derzeit behandeln wir dies wie folgt:

//jqGrid load complete handler 
function loadComp(grid) { 
    if (grid.getGridParam("url") != "NoData.json" && grid.getGridParam("records") == 0) { 
     setStatus("Your search did not return any results"); 
    } 
} 

Dies scheint nur ein wenig hacky .. möchten nur haben das Raster nicht zunächst alle Daten geladen werden.

Irgendwelche Ideen?

Antwort

31

Sie sollten zuerst datatype: 'local' zunächst verwenden. Im Moment, wenn Sie die Daten geladen werden müssen, sollten Sie das ändern datatype zu json oder xml:

$("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 
+0

Versucht, dass - Problem ist mit 'Datatype: local' und keine' URL', meine 'loadComplete' Callback wird immer noch aufgerufen. Ich hatte auf einen Ansatz gehofft, der den Callback nicht auslösen würde - oder zumindest einen saubereren Weg im Callback, um zu bestimmen, dass dies der Anfangszeitpunkt des Gitters ist. –

+4

@Marcus: Natürlich wird das 'loadComplete' Event Handle in allen Situationen aufgerufen. Wenn Sie eine Nachricht nur beim Laden vom Server anzeigen möchten, können Sie die Nachricht nur anzeigen, wenn 'datatype' gleich" json "ist, wie in http://stackoverflow.com/questions/3564898/jqgrid-programatically-select -grid-row/3571392 # 3571392 – Oleg

+2

Die 'grid.getGridParam ('datatype') ===" json "' Lösung funktionierte gut .. –

18

ich ein Raster erstellen wollte, die keine Daten geladen wird, wenn die Seite geladen wird, sondern lädt Daten, wenn der Benutzer klickt aktualisieren oder verwendet die Suche. Meine Lösung ist ein bisschen hacky zu aber ist sehr einfach und funktioniert gut.

Ich verwende das Rückrufereignis loadBeforeSend, um die AJAX-Anforderung für Daten zu beenden, wenn die Seite geladen wird. Meine Callback-Funktion entfernt sich selbst und wird daher nur einmal ausgeführt.

loadBeforeSend: function (xhr, settings) { 
    this.p.loadBeforeSend = null; //remove event handler 
    return false; // dont send load data request 
} 
+0

Wohin gehe ich 20 mal upvote? –

+0

Warum dies nicht die Antwort ist Ich habe das auf all meinen Gittern verwendet (die, die nicht geladen werden müssen) –

+0

Genau das, was ich gesucht habe, danke! – masterwok

-2

Setzen Sie keine URL, wenn Sie das Grid initialisieren. Legen Sie die URL unmittelbar vor dem Laden des Gitters mit der Funktion setGridParam fest.

Es funktioniert für mich.

Verwandte Themen