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} ...}