2017-11-07 5 views
1

Ich habe jqGrid mit clientseitige Filterung. Ich habe dort eine Spalte, id_medpred, die Fremdschlüssel zu verwandter Tabelle enthält, aber entsprechendes Zeichenfeld name aus verwandter Tabelle medpreds anzeigt.jqGrid 4.5.2. Filterung mit Nachschlagefeld

Ich möchte: Suche nach String-Feld name von Filter-Symbolleiste in dieser Spalte, aber ich weiß nicht, was ich tun soll. In diesem Moment funktioniert der Filter nur mit dem Ganzzahlwert des Fremdschlüssels. Initialisierung des Netzes:

$("#table-extrefs").jqGrid({ 
     editurl: 'test.php', 
     datatype: 'clientSide', 
     rowNum: 9999, 
     loadonce: true, 
     cellEdit: true, 
     cellsubmit: 'remote', 
     cellurl: 'index.php?article=external_referers&act=process_submit', 
     colNames: [ 
      'ФИО врача', 
      'Код врача', 
      'Дата добавления', 
      'Специальность', 
      'Телефон', 
      'Медпред', 
      'Медпред', 
      'ЛПУ', 

     ], 
     colModel: [ 
      {name: 'id', index: 'id', hidden: true, key: true}, 
      {name: 'fio', index: 'fio', width: '200', sortable: true, sorttype: 'text', editable: true, edittype: "text", frozen: true}, 
      {name: 'code', index: 'code', width: '55', sortable: true, sorttype: 'text', editable: true, edittype: "text", frozen: true}, 
      {name: 'adding_date', formatter: 'date', index: 'adding_date', width: '65', sortable: true, sorttype: 'date', editable: false, 
       srcformat: 'dd.mm.YY', edittype: "text", frozen: true, 
       searchoptions: { 
        searchOperators: true, 
        sopt: ['ge'], 
        clearSearch: false, 
        dataInit: function (elem) { 
         $(elem).datepicker({ 
          dateFormat: 'dd.mm.yy', 
          autoSize: true, 
          language: 'ru', 
          changeYear: true, 
          changeMonth: true, 
          showButtonPanel: true, 
          showWeek: true 
         }); 
        } 
       } 
      }, 
      {name: 'speciality', index: 'speciality', sortable: true, width: '95', editable: true, edittype: "text", frozen: true}, 
      {name: 'phone', index: 'phone', editable: true, edittype: "text", width: '90', frozen: true}, 
      {name: 'id_medpred', index: 'id_medpred', sortable: true, editable: true, 
       edittype: 'select', 
       formatter: 'select', 
       editoptions: {value: getAllMedpreds()}, 
       frozen: true, 
       width: '100', 
       //searchrules : { custom_func : function(a,b){ console.log(a,b);}} 
      }, 
      {name: 'medpred', index: 'medpred', sortable: true, editable: true, edittype: "text", frozen: true, hidden: true, }, 
      {name: 'lpu', index: 'lpu', sortable: true, editable: true, edittype: "text", frozen: true}, 
      {name: 'metro', index: 'metro', sortable: true, editable: true, edittype: "text", width: '150', frozen: true}, 
      {name: 'district', index: 'district', editable: true, edittype: "text", width: '50', frozen: true},    
     ], 
     forceFit: true, 
     ignoreCase: true, 
     height: '630px', 
     width: '1200px', 
     viewrecords: true, 

    }); 

EDIT

Vielen Dank für Tony Tomow.

Ich habe einige ziemlich hässlich Lösung, tat es funktionieren, aber:

beforeSearch : function() { 
      //gs_id_medpred it's id of filter input field. 
      var medpred = $('#gs_id_medpred').val(); 
      var medpreds = getAllMedpreds() 
      var filters = $('#table-extrefs').getGridParam("postData").filters; 
      if ("undefined" != typeof(medpred) && medpred.length > 0) 
      { 
       filters_obj = JSON.parse(filters); 
       for (var i in filters_obj.rules) 
       { 
        if (filters_obj.rules[i].field === 'id_medpred') 
        { 
         for (var j in medpreds) 
         { 
          if (medpreds[j].indexOf(medpred)!==-1) 
          { 
           filters_obj.rules[i].data = j; 
           break; 
          } 
         } 
        } 
       } 
       $('#table-extrefs').getGridParam("postData").filters = JSON.stringify(filters_obj); 
       var filters = $('#table-extrefs').getGridParam("postData").filters; 
       console.log(filters); 
      } 

I beforeSearch behandelt und verändert Datenfilter entsprechend, um es ID ist im Wörterbuch von medpreds.

Antwort

1

Zuerst las ich sehe zwei mögliche Lösungen

  1. Verwenden Sie die select2 plugin für das ausgewählte Element

  2. definieren eingereicht versteckt die Namen medpreds entsprechen, sondern setzen sie durchsuchbar zu sein (dies ist in Fall, wenn Suchdialog verwendet wird) Auf diese Weise erscheint im Suchdialog der Name und Sie können danach suchen

    {Name: "medspredname", hidden: true, ... Suchoptionen: {searchidden: true} ... }