jqGrid 4.5.2。 使用查找字段进行过滤

我有jqGrid客户端过滤。 我在那里有一列, id_medpred ,其中包含相关表的外键,但显示相关表medpreds专用字符串字段name

我想要:通过该列中的过滤器工具栏中的字符串字段name进行搜索,但我不知道该怎么办。 此时,过滤器只能通过外键的整数值工作。 网格初始化:

  $("#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,

    });

编辑

谢谢Tony Tomow。

不过,我做出了一些非常难看的解决方案,但确实如此:

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);
          }

我在medpreds处理过,并相应地将过滤器数据更改为medpreds字典中的ID。


起初读我看到两种可能的解决方案

  • 使用select2插件作为select元素

  • 定义与medpreds名称相对应的隐藏域,但将其设置为可搜索(这是在使用搜索对话框的情况下)这种方式在搜索对话框中将显示名称,您可以在其上搜索

    {name:“medspredname”,隐藏:true,... searchoptions:{searchhidden:true} ...}

  • 链接地址: http://www.djcxy.com/p/25963.html

    上一篇: jqGrid 4.5.2. Filtering with lookup field

    下一篇: JQgrid sort by date that is sent as string by server