JqGrid addJSONData + ASP.NET 2.0 WS
Ich bin ein bisschen verloren. Ich habe versucht, eine Lösung implementieren, basierend auf JqGrid und versucht die Funktion als Datentyp. Ich habe eingestellt alle durch das Buch, ich denke, ich bekomme WS aufgerufen und erhalten JSON zurück, ich habe Erfolg auf clientseitige ajax-Aufruf und ich "bind" jqGrid mit addJSONData
aber das Netz bleibt leer. Ich habe keine Ahnung jetzt... andere "lokale" Beispiele auf der gleichen Seiten funktionieren ohne problem (jsonstring ...)
Meine WS-Methode sieht wie folgt aus:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetGridData()
{
//Load a list
InitSessionVariables();
SA.DB.DenarnaEnota.DenarnaEnotaDB db = new SAOP.SA.DB.DenarnaEnota.DenarnaEnotaDB();
DataSet ds = db.GetLookupForDenarnaEnota(SAOP.FW.DB.RecordStatus.All);
//Turn into HTML friendly format
GetGridData summaryList = new GetGridData();
summaryList.page = "1";
summaryList.total = "10";
summaryList.records = "160";
int i = 0;
foreach (DataRow dr in ds.Tables[0].Rows)
{
GridRows row = new GridRows();
row.id = dr["DenarnaEnotaID"].ToString();
row.cell = "[" + "\"" + dr["DenarnaEnotaID"].ToString() + "\""
+ "," + "\"" + dr["Kratica"].ToString() + "\""
+ "," + "\"" + dr["Naziv"].ToString() + "\""
+ "," + "\"" + dr["Sifra"].ToString() + "\""
+ "]";
summaryList.rows.Add(row);
}
return JsonConvert.SerializeObject(summaryList);
}
meine ASCX-code ist:
jQuery(document).ready(function(){
jQuery("#list").jqGrid({
datatype : function (postdata) { jQuery.ajax({ url:'../../AjaxWS/TemeljnicaEdit.asmx/GetGridData',
data:'{}',
dataType:'json',
type: 'POST',
contentType: "application/json; charset=utf-8",
complete: function(jsondata,stat){
if(stat=="success")
{
var clearJson = jsondata.responseText;
var thegrid = jQuery("#list")[0];
var myjsongrid = eval('('+clearJson+')');
alfs
thegrid.addJSONData(myjsongrid.replace(/\\/g,''));
}
}
}
);
},
colNames:['DenarnaEnotaID','Kratica', 'Sifra', 'Naziv'],
colModel:[
{name:'DenarnaEnotaID',index:'DenarnaEnotaID', width:100},
{name:'Kratica',index:'Kratica', width:100},
{name:'Sifra',index:'Sifra', width:100},
{name:'Naziv',index:'Naziv', width:100}],
rowNum:15,
rowList:[15,30,100],
pager: jQuery('#pager'),
sortname: 'id',
// loadtext:"Nalagam zapise...",
//viewrecords: true,
sortorder: "desc",
//caption:"Vrstice",
//width:"800",
imgpath: "../Scripts/JGrid/themes/basic/images"});
});
ab WS bekomme ich JSON so:
{”page”:”1″,”total”:”10″,”records”:”160″,”rows”:[{"id":"18","cell":"["18","BAM","Konvertibilna marka","977"]“},{”id”:”19″,”cell”:”["19","RSD","Srbski dinar","941"]“},{”id”:”20″,”cell”:”["20","AFN","Afgani","971"]“},{”id”:”21″,”cell”:”["21","ALL","Lek","008"]“},{”id”:”22″,”cell”:”["22","DZD","Alžirski dinar","012"]“},{”id”:”23″,”cell”:”["23","AOA","Kvanza","973"]“},{”id”:”24″,”cell”:”["24","XCD","Vzhodnokaribski dolar","951"]“},{”id”:”25″,”cell”:”
………………
["13","PLN","Poljski zlot","985"]“},{”id”:”14″,”cell”:”["14","SEK","Švedska krona","752"]“},{”id”:”15″,”cell”:”["15","SKK","Slovaška krona","703"]“},{”id”:”16″,”cell”:”["16","USD","Ameriški dolar","840"]“},{”id”:”17″,”cell”:”["17","XXX","Nobena valuta","000"]“},{”id”:”1″,”cell”:”["1","SIT","Slovenski tolar","705"]“}]}
Ich mich registriert habe dieses JavaScript:
clientSideScripts.RegisterClientScriptFile("prototype.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/prototype-1.6.0.2.js"));
clientSideScripts.RegisterClientScriptFile("jquery.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/jquery.js"));
clientSideScripts.RegisterClientScriptFile("jquery.jqGrid.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/jquery.jqGrid.js"));
clientSideScripts.RegisterClientScriptFile("jqModal.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/js/jqModal.js"));
clientSideScripts.RegisterClientScriptFile("jqDnR.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/js/jqDnR.js"));
Grundsätzlich finde ich, es muss etwas dumm... aber ich kann es nicht herausgefunden... jetzt
InformationsquelleAutor MilosC | 2009-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe versucht, dieses problem zu lösen, für die letzten paar Stunden. Ich habe jetzt aufgegeben, immer AddJSONData arbeiten - meine web-service-Methode ist die Rückgabe ein array so wie es aussieht mit addRowData arbeiten.
Wenn Sie nicht auslagern, die Sie einbinden konnte die Zeilen in ein object-tag,... { 'page':1, 'total':1, 'Aufzeichnungen':Zeilen.Länge, 'Aufzeichnungen':Zeilen } und verwenden, die mit addJSONData.
diese Lösung ist mit wenig änderungen abhängig von, was Sie von webservice - ...für mich ist es: Erfolg: Funktion(jsondata, stat) { var thegrid = $("#Liste"); var ausgewertet = JSON.parse(jsondata.d); for (var i = 0; i < ausgewertet.length; i++) { thegrid.addRowData(i + 1, ausgewertet[i]); } }
InformationsquelleAutor
Den Aufbau der jqGrid sieht gut aus.
Sind Sie sicher, dass das, was Sie zurück in die
jsondata.responseText
ist das, was Sie beschreiben?Dem webservice, den ich Schreibe .Nettorendite JSON wie folgt formatiert:
In meiner Funktion, die ich hatte, dies zu tun:
Hatte ich zum konvertieren den string zu JSON-zwei mal, bevor ich tatsächlich bekam die Daten, die ich brauchte.
Wenn Sie große Probleme. Ich schlage vor, Debuggen diese Stück für Stück. Führen Sie eine einfache Aussage wie diese:
Funktionieren sollte, zumindest. Danach einfach die Ausgabe analysieren, die Sie von der web-Dienst und stellen Sie sicher, dass Sie nur können, die Anweisung für "komplett".
Richtig, nur double-checking. Haben Sie versuchen Sie versuchen, führen Sie einfach die Funktion auf Ihre eigenen, während Sie das Dokument.bereit oder während einer onclick Funktion? Nur um zu sehen, wenn Sie fügt hinzu, es auf seine eigene?
InformationsquelleAutor Robert Luong
Tatsächlich, der Schlüssel scheint zu sein, den Parameter auf addJSONData, die nicht in den docs:
Die web-Methode, die mit geht, die ist :
InformationsquelleAutor
Ich bin auch mit einem webservice zur übergabe der Daten an ein jqGrid. Ich lief in das gleiche problem, und hier ist der code, der in das komplette Angebot von .ajax-Funktion.
Der Schlüssel ist die .d nach dem responseText-ausgewertet wird in ein JSON-Objekt.
InformationsquelleAutor Frenchie
Ich weiß, es ist alt, aber das ist wohl Ihr Problem...
Machen Reihe.Zelle eine Liste, dann kannst du das tun...
Auf die script-Seite...
myjsongrid ist ein Objekt an diesem Punkt, es in der Regel nicht ein .replace-Methode auf Objekte. Auch, sollten Sie wahrscheinlich verwenden einen JSON-parser statt des eval. Ich benutze eine modifizierte version von Crockford ' s json2.js mich aber YMMV.
Dies sollte jede Zeile, wie Sie es wollen, lassen Sie den serializer Umgang mit der Konvertierung... ich eigentlich serialisieren meine datatables { columns:['colname',...], Zeilen:[['row1val',...],['row2val',...],...] } und zerlegen es auf client-Seite wie ich Sie verwenden einige der gleichen Anrufe zu bevölkern verschiedene Netze... ich habe eine client-side-selectForJqGrid(Tabelle, keycol, [col-Liste]) wird es für den Einsatz direkt an ein jqGrid.
InformationsquelleAutor Tracker1
Diese funktioniert bei mir:
Oder versuchen Sie dies:
Mein raster-Datentyp ist jsonstring.
InformationsquelleAutor
Ich bin ziemlich überrascht, mit wie irreführend manche der jqGrid Vorschläge wurden.
Es gibt zwei Möglichkeiten, um zu füttern eine jqGrid mit JSON-Daten von Ihrem service.
Können Sie entweder schreiben Sie eine Methode zum zurückgeben einer "chunk" von Daten für das jqGrid, mit gerade genug Daten für eine Seite der Ergebnisse.
Oder Sie können sich das Leben erleichtern, geben alle die JSON-Daten in einem Rutsch, und erhalten Sie jqGrid zum verarbeiten der paging-ohne jede weitere Anrufe, um Ihre JSON-Service.
Den Schlüssel dazu ist die loadonce jqGrid Einstellung:
Zum Beispiel, habe ich ein JSON-web-service, das gibt eine Liste der Bestellungen für einen bestimmten Kunden-ID:
http://www.iNorthwind.com/Service1.svc/getOrdersForCustomer/BERGS
..und ich möchte das jqGrid:
Hier ist, wie meine jqGrid Erklärung würde so Aussehen:
Achten Sie auf diese drei Zeilen oben:
Dies verhindert böse "addJSONdata" Ausnahmen auftreten, und sagt, jqGrid, dass, tatsächlich, unsere JSON-array von Daten in der GetOrdersForCustomerResult Teil meiner JSON-Ergebnisse.
Und das ist es. Keine Notwendigkeit zu nennen AddJSONdata überhaupt.
Den vollständigen Durchlauf dieses Beispiel finden Sie auf meinem blog:
http://mikesknowledgebase.com/pages/Services/WebServices-Page10.htm
(Ich wünschte, ich hätte diesen Artikel zu Lesen, drei Stunden, als ich begann, mich in diese Fragen !!)
InformationsquelleAutor Mike Gledhill
Ihr problem ist, sollten Sie verwenden
addJSONData
mit responseText.eval
es und dann den JSON-string Parsen, JSON in JavaScript. Das sollte die Arbeit rund um in Ordnung.Auf Frenchie ' s Antwort möchte ich noch hinzufügen, einige Tipps:
So, dass deine JSON. Und das JqGrid sollte richtig konfiguriert sein, mit
JsonReader
so, dass es nicht ein Fehler, während Sie die Daten laden möchten: mit welchem index Sie haben. Dies sollte Ihr problem lösen.InformationsquelleAutor Joy