2016-11-24 3 views
0
jqGrid 4.13.6-pre - free jqGrid 

formatieren Ich benutze navGrid und Inline-Bearbeitung und habe Probleme mit der Formatierung Validierung Nachrichten vom Server zurückgesendet. Die Validierungsnachrichten erscheinen ordnungsgemäß, wenn sie von einer Inline-Bearbeitung zurückkommen, aber sie sehen nicht gut aus, wenn auf das Formular zum Hinzufügen/Bearbeiten über die Grid-Navigation zugegriffen wird.JqGrid, wie kann ich Fehlermeldungen bei der Verwendung von navGrid

Ich lese viel über das errorTextFormat-Ereignis und es scheint genau das zu tun, was ich will, aber ich kann nicht herausfinden, wie man darauf zugreifen kann, wenn das Formular vom Grid-Nav geöffnet wird. Ich bin sicher, es gibt eine einfache Möglichkeit, es zu konfigurieren, aber ich konnte es nicht herausfinden.

$(function() { 
     var lastSel = 0; 

     $("#Grid") 
      .jqGrid({ 
       url: '/url/to/griddata', 
       datatype: 'json', 
       mtype: 'POST', 
       colNames: ['Id', 'Name'], 
       colModel: [ 
        { name: 'Id', hidden: false, search: true, width: 150, align: 'center', sortable: true, editable: false, formatter: null, edittype: 'text' }, 
        { name: 'Name', hidden: false, search: true, width: 150, align: 'center', sortable: true, editable: true, formatter: null, edittype: 'text', editoptions: { maxlength: 256, value: null, required: true } }], 
       pager: '#GridPager', 
       prmNames: { 
        page: 'PageNumber', 
        rows: 'PageSize', 
        sort: 'SortColumn', 
        order: 'SortOrder', 
        search: 'Search', 
        nd: 'nd', 
        npage: 'null' 
       }, 
       rowNum: 60, 
       rowList: [ 
        15, 
        30, 
        60, 
        120 
       ], 
       sortname: "Name", 
       sortorder: "asc", 
       viewrecords: true, 
       hidegrid: false, 
       gridview: true, 
       caption: '', 
       width: 980, 
       height: 100, 
       editurl: '/my/edit/url', 
       edit: { 
        errorTextFormat: function (data) { 
         alert('fired'); 
         console.log(data); 
         return "error here"; 
        } 
       }, 
       jsonReader: { 
        total: 'TotalPages', 
        page: 'CurrentPage', 
        records: 'TotalRecords', 
        root: 'Rows', 
        id: 'Id', 
        repeatitems: false 
       }, 
       onSelectRow: function(id) { 
        if (id && id !== lastSel) { 
         jQuery('#Grid').restoreRow(lastSel); 
         lastSel = id; 
        } 
        $('#Grid').jqGrid('editRow', id, 
        { 
         keys: true 
        }); 
       } 
      }); 

     $("#Grid").filterToolbar({ autosearch: true, searchOnEnter: false }); 
     $("#Grid").navGrid('#GridPager', { 
      del: false, search: false, editerrorTextFormat: function (data) { 
       alert('fired'); 
       console.log(data); 
       return "error here"; 
      } 
     }); 

Hier ist das Markup.

+0

, umfassen Codefragmente, die zeigt, wie Sie versucht, Formularbearbeitung und den Rückruf 'errorTextFormat' zu verwenden. Typischer Fehler: Der Callback wird an der falschen Stelle eingefügt. Sie sollten zusätzlich immer die Informationen über die Version und die Verzweigung von jqGrid angeben, die Sie verwenden (oder verwenden können). Es gibt zwei Hauptgabeln: [freies jqGrid] (https://github.com/free-jqgrid/jqGrid), kommerzielles [Guriddo jqGrid JS] (http://guriddo.net/?page_id=103334) und ein altes jqGrid in einer Version <= 4.7.Es gibt * verschiedene * Möglichkeiten, 'errorTextFormat' in jqGrid anzugeben. – Oleg

+0

Wenn Sie nach Beispielen für die Verwendung 'errorTextFormat' suchen, finden Sie weitere Informationen [hier] (http://stackoverflow.com/a/6803206/315935) und [hier] (http://stackoverflow.com/a/14864422)/315935) zum Beispiel. Wenn dies nicht hilft, sollten Sie Ihre Frage mit JavaScript-Code und einem Beispiel für die Serverantwort, einschließlich des HTTP-Codes, der für die Rückgabe von Validierungsfehlern vom Server verwendet wird, anhängen. Die Antwort kann in den Entwickler-Tools von IE/Chrome/Firefox (Registerkarte "Netzwerk") oder in [Fiddler] (http://www.telerik.com/fiddler) angezeigt werden. – Oleg

+0

Ich habe der Frage das Javascript/Markup hinzugefügt. – James

Antwort

0

Es gibt keine edit Möglichkeit jqGrid und keine editerrorTextFormat Eigenschaft navGrid. Es ist leicht zu beheben Sie Code durch Verwendung formEditing Optionen, die Standardwerte editGridRow Methode verwendet, um direkt oder indirekt in das Raster festlegen können. Sie müssen nur edit Option zu formEditing umbenennen und Ihr Code sollte funktionieren. Es ist nur wichtig, dass der Server einen Fehler-HTTP-Statuscode verwendet, wenn der Fehler gemeldet wird (z. B. 400 oder höher). Der Fehlercode 500 oder höher scheint mir in Ihrem Fall die beste Wahl zu sein.

Auf die gleiche Weise können Sie die Optionen von filterToolbar angeben oder Suche Dialog innerhalb der searching Option freien jqGrid. Sie können die Standardoptionen navGrid innerhalb der navOptions Option von jqGrid angeben.

Ich würde Ihnen empfehlen, zusätzlich savedRow Parameter von jqGrid statt lastSel Variable zu verwenden. Der Parameter wird von jqGrid beim Starten der Inline-Bearbeitung oder der Zellenbearbeitung gefüllt. Enthält das Array bearbeitbarer Werte vor Modifikationen und id Eigenschaft zusätzlich. Weil Sie cal

empfehle ich Ihnen zusätzlich pager: true zu verwenden, anstatt pager: '#GridPager' und nur '#GridPager' Parameter von navGrid oder inlineNav überspringen. Free jqGrid wird die <div> für den Pager automatisch generieren, es wird die eindeutige ID dem div zuweisen und es wird pager: true Parameter zu '#generatesIdValueOfTheDiv' ändern. Ihr Code wird etwas kürzer und einfacher zu lesen und zu pflegen sein.

Der endgültige Code könnte wie folgt aussehen

$(function() { 
    $("#Grid") 
     .jqGrid({ 
      url: '/url/to/griddata', 
      datatype: 'json', 
      mtype: 'POST', 
      colModel: [ 
       { name: 'Id', align: 'center' }, 
       { name: 'Name', align: 'center', editable: true, 
        editoptions: { maxlength: 256, required: true } } 
      ], 
      pager: true, 
      prmNames: { 
       page: 'PageNumber', 
       rows: 'PageSize', 
       sort: 'SortColumn', 
       order: 'SortOrder', 
       search: 'Search' 
      }, 
      rowNum: 60, 
      rowList: [ 
       15, 
       30, 
       60, 
       120 
      ], 
      sortname: "Name", 
      viewrecords: true, 
      hidegrid: false, 
      width: 980, 
      height: 100, 
      editurl: '/my/edit/url', 
      jsonReader: { 
       total: 'TotalPages', 
       page: 'CurrentPage', 
       records: 'TotalRecords', 
       root: 'Rows', 
       id: 'Id', 
       repeatitems: false 
      }, 
      formEditing: { 
       closeOnEscape: true, 
       closeAfterEdit: true, 
       savekey: [true, 13], 
       errorTextFormat: function (data) { 
        alert('fired'); 
        console.log(data); 
        return "error here"; 
       } 
      }, 
      inlineEditing: { 
       keys: true 
      }, 
      searching: { 
       searchOnEnter: false 
      }, 
      navOptions: { 
       del: false, 
       search: false 
      }, 
      onSelectRow: function (rowid) { 
       var $self = $(this), i, 
        // savedRows array is not empty if some row is in inline editing mode 
        savedRows = $self.jqGrid("getGridParam", "savedRow"); 

       for (i = 0; i < savedRows.length; i++) { 
        if (savedRows[i].id !== rowid) { 
         // cancel editing of not saved rows 
         $self.jqGrid("restoreRow", savedRows[i].id); 
        } 
       } 

       $self.jqGrid("editRow", rowid); 
      } 
     }) 
     .jqGrid("filterToolbar"); 
     .jqGrid("navGrid"); 
}); 

(ich noch ein paar Eigenschaften in formEditing hinzugefügt, die man häufig verwendet. Sie können nicht mehr benötigte Eigenschaften entfernen). Ich habe einige nicht benötigte Optionen und einige nicht benötigte Eigenschaften von colModel entfernt, weil Sie die Werte default angegeben haben. Bitte

+0

Danke für die Antwort, ich werde es mir alles ansehen und sehen, ob ich es tun kann, was ich brauche. Ich verwende 400 Response, da es sich tatsächlich um serverseitige Validierungsfehler handelt (wie ein Objekt mit dem angegebenen Namen), die ich dem Benutzer anzeigen möchte, da es kein erfolgreicher Speichervorgang ist. Mein Colmodel-Zeug wird auf der Serverseite generiert, basierend auf einigen von mir erstellten jqgrid-Modellen. Deshalb wurden alle Standardwerte ausgegeben, weil ich sie aus irgendeinem Grund nicht übersteuert habe. – James

+0

Danke für die Info, das Verschieben in den formEditing Parameter hat perfekt funktioniert. Die anderen Informationen waren auch gut zu wissen. – James

+0

@James: Gern geschehen! – Oleg

Verwandte Themen