2016-08-09 8 views
0

In Server-Seite IJqGrid abhängig von der Anzahl der zurückgegebenen Datensätze

so ein Cloud-System implementiert, wenn jqGrid eine Anfrage an den Server mit rownumber 10 senden meine es

zum Beispiel in beck-Ende mehr Aufzeichnungen da sein kann 3-Server sein,

Server 1: 10 Datensätze zurückgegeben

2: 10 Datensätze zurückgegeben

3: 7 ergab Aufzeichnungen.

Also alle Datensätze sind 27, aber JqGrid zeigen nur 10 von ihnen auf einer Seite und auf der nächsten Seite eine andere Anfrage an den Server senden.

„eine gute jqGrid! Muss es wissen, sind 3 Seite in 2 Paging-Anforderung nicht durch dritte Paging neue Anfrage an den Server sendet an den Server senden, um nächsten 10 Datensätze zu holen“

habe ich ein jqGrid configed wie dies:

$("#ExamGrid").jqGrid({ 
      url: '../Handlers/Study/StudySearch.ashx', 
      editurl: '../Handlers/Study/StudySearch.ashx', 
      datatype: 'json', 
      beforeRequest: function() { 
      }, 
      postData: { 
      }, 
      //autowidth: true, // set 'true' here 
      //shrinkToFit: true, 
      height: 'auto', 
      autoencode: true, 
      ignoreCase: true, 
      forceFit: false, 
      colModel: $.evalJSON(colModel), 
      loadError: function (xhr, st, err) { 
      }, 
      onPaging: function() { 
      }, 
      resizeStop: function() { 
       SaveColumns(); 
      }, 
      onSelectRow: function (rowid, status, e) { 
       // studyInstanceUID = rowid; 
      }, 
      multiselect: true, 
      rowNum: 10, 
      rowList: [10, 20, 30, 40], 
      pager: '#UsersGridPager', 
      page: parameters.PageIndex, 
      gridview: true, 
      sortname: 'Study Date', 
      prmNames: { nd: null }, 
      hidegrid: false, 
      sortable: false, 
      jsonReader: { cell: "", search: "isSearch" }, 
      viewrecords: true, 
      sortorder: 'desc', 
      caption: 'Exam List', 
      //viewsortcols: [true, 'vertical', false], 
      gridComplete: function() { 
      }); 

In Server-Seite:

IExamServiceJoinable examClient; 
     if (Global.IsCloudConfigured) 
      examClient = new DispatcherClient("dispatcherEndPoint", Token, Global.Cluster); 
     else 
      examClient = new ExamClient("examEndPoint"); 
     TotalPatient = examClient.GetNumberOfStudies(criteria); //study.Count(authorityWhereClause, criteria, sm ?? new SearchMatching()); 
     Start = ((pageIndex * numberOfRows) - numberOfRows); 
     TotalPage = TotalPatient/numberOfRows; 
     List<Study_C> studies = examClient.FindStudies(Start, numberOfRows, col.FromText(sortColumnName), sort.FromText(sortOrder), criteria); 

Im Normalfall, wenn ich hole Datensatz von einem Server alles funktioniert wie ein Charme, aber nehme Global.IsCloudConfigured ist richtig, also können mehrere Server und mehr DB zu diesem Dienst Datensätze von ihnen abrufen, in diesem Fall ist studies mehr als angefordert numberOfRows.

jetzt mit oben genanntem Szenario, wie kann ich JQGrid konfigurieren, um alle von ihnen auf einer Seite zu laden, oder jeder bessere Weg würde geschätzt werden? Wie kann ich ein kluges JQGrid machen, um das zu wissen?

danke im voraus.

Update: Es gibt eine sehr un-effiziente Art und Weise bleibt in loadComplete Aufzeichnungen auf einer Seite hinzuzufügen es funktioniert, wenn zurückgegebenen Datensätze niedrig sind.

if (data.IsCloudConfigured == true) {; 
        for (var i = 0; i <= data.rows.length - 1; i++) { 
         var rowData = $("#ExamGrid").jqGrid('getRowData', data.rows[i].StudyUID); 
         if (rowData.StudyUID === undefined) { 
          $("#ExamGrid").addRowData(data.rows[i].StudyUID, data.rows[i]); 
         } 
        } 
       } 

Antwort

0

Ich hoffe, dass ich Ihr Problem richtig verstehe. In dem Fall, dass der Server (jeder von den Servern in der Cloud) alle Datensätze (27 Zeilen von Daten) auf einmal zurückgeben muss. Sie müssen nur die Option loadonce: true verwenden, um jqGrid zu informieren, dass es data basierend auf den vom Server zurückgegebenen Daten füllt. Es ermöglicht das lokale Paging, Sortieren und Filtern/Suchen.

Wenn Sie free jqGrid Gabel von jqGrid verwenden, die ich entwickle, dann würde ich Ihnen empfehlen, forceClientSorting: true Option in Kombination mit loadonce: true zu verwenden. Es ermöglicht lokal die Daten zu sortieren und zu filtern, die vom Server zurückgegeben werden, bevor sie dort im Grid angezeigt werden.

+0

Vielen Dank für Ihre schnelle Antwort, 'loadonce' ist nicht meine Lösung. Wenn das System' CloudConfigged' ist, ist dies passiert. im Normalfall gebe ich 10 Datensätze im Paging zurück, ich kann nicht alle Datensätze in einer Anfrage laden, es gibt Millionen Datensätze. – Aria

+0

@Aria: Wenn Sie das Raster mit Millionen Datensätze haben, dann haben die Beispiel mit 27 keine Beziehung zu Ihrem Problem. Man wählt den Weg von einigen Zahlen abhängig.Wenn ich meinen Freund besuchen muss, der 300 m von mir entfernt lebt, laufe ich, wenn er 5 km von mir entfernt ist, benutze ich das Auto und wenn er 5000 km von mir entfernt ist, wähle ich das Flugzeug. Sie sollten genauer formulieren, was Sie implementieren müssen. Sie sollten den Text Ihrer Frage mit genaueren Informationen ändern. Müssen Sie verschiedene URLs abhängig von der Seitenzahl verwenden? Welche Version von jqGrid verwendest du und von welcher Abzweigung von jqGrid? – Oleg

+0

Siehe mein Update, ist das ein wenig klar? – Aria

Verwandte Themen