Anonymous
JqGrid динамически меняет тип оператора поиска при нажатии кнопки
Сообщение
Anonymous » 26 дек 2024, 10:38
Это моя jqgrid
Код, связанный с сеткой
Код: Выделить всё
var lastsel2;
var containsOrNot = 'contains';
jQuery(document).ready(function(){
jQuery("#list").jqGrid({
url: "{{ asset('/app_dev.php/_thrace-datagrid/data/item_lookup_management') }}",
postData: {
masterGridRowId: {{ VPK }}
},
datatype: "json",
mtype: 'POST',
colNames: ['Item No', 'Description 1', 'Vendor Item No','Report Dec','Location','On Hand','Exp balance','Available now','Lead Time','Type', 'Vendor #', 'Status', 'Stocked', 'Product Line', 'Creator'],
colModel: [
{
name: "I_ItemNumID",
index: "u.I_ItemNumID",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '70'
},
{
name: "I_Desc1",
index: "u.I_Desc1",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '70'
},
{
name: "I_VendorItemNum",
index: "u.I_VendorItemNum",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "I_ReportDec",
index: "u.I_ReportDec",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "I_BinNum",
index: "u.I_BinNum",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "I_OnHandTotal",
index: "u.I_OnHandTotal",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "R_ClosingBalance",
index: "u.R_ClosingBalance",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "R_BalanceActual",
index: "u.R_BalanceActual",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "I_LeadTime",
index: "u.I_LeadTime",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "I_ItemType",
index: "u.I_ItemType",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "I_VendorNumID",
index: "u.I_VendorNumID",
editable: false,
align: 'left',
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
width: '100'
},
{
name: "I_Status",
index: "u.I_Status",
editable: false,
width: 100,
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
align: 'left'
},
{
name: "I_isStocked",
index: "u.I_isStocked",
editable: false,
width: 100,
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
align: 'left'
},
{
name: "I_ProductLine",
index: "u.I_ProductLine",
editable: false,
width: 150,
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
align: 'left'
},
{
name: "I_CreatedSysUser",
index: "u.I_CreatedSysUser",
editable: false,
width: 100,
searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']},
align: 'left'
}
],
ondblClickRow: function(rowid) {
var rowData = jQuery('#list').jqGrid ('getRowData', rowid);
window.opener.document.getElementById('productDetail_V_PK').value = rowid;
window.opener.document.getElementById('productDetail_V_Desc').value = rowData.I_ItemNumID;
window.close();
},
height: 400,
rowNum: 50,
rowTotal: 1000000,
width: 3000,
gridview: true,
autoencode: false,
pager: '#pager',
shrinkToFit: true,
sortable: true,
sortname:"u.id",
sortorder: "desc",
viewrecords: true,
//multiselect: true,
loadonce:false,
onCellSelect: function(row, col, content, event) {
var cm = jQuery("#list").jqGrid("getGridParam", "colModel");
//alert(cm[col].name);
if (window.getSelection) {
selection = window.getSelection();
} else if (document.selection) {
selection = document.selection.createRange();
}
selectionColumn = cm[col].name;
selection.toString() !== '' && $("#gs_"+selectionColumn).val(selection.toString());
},
rowList: [50, 100, 500, 1000]
});
jQuery("#list").jqGrid('navGrid',"#pager",{ del:false, add:false, edit:false},{multipleSearch:true}).navButtonAdd('#pager',{
caption: "Select",
buttonicon:"ui-icon-disk",
onClickButton: function(){
var myGrid = $('#list');
selectedRowId = myGrid.jqGrid ('getGridParam', 'selrow');
var rowData = jQuery('#list').jqGrid ('getRowData', selectedRowId);
if(selectedRowId != null)
{
window.opener.document.getElementById('productDetail_V_PK').value = selectedRowId;
window.opener.document.getElementById('productDetail_V_Desc').value = rowData.I_ItemNumID;
window.close();
}
else
{
$(function() {
$( "#dialog-message" ).dialog({
modal: true,
buttons: {
Ok: function() {
$( this ).dialog( "close" );
}
}
});
});
}
},
position:"last"
});
jQuery("#list").jqGrid('filterToolbar',{
searchOperators: true,
stringResult: true,
searchOnEnter : true,
sopt: ['cn','eq','ne','lt','le','gt','ge','bw','ew','nc'],
beforeSearch: function(){
if(containsOrNot == "notContains" && containsOrNot != "contains")
{
//CODE FOR EXCLUDE EXECUTE HERE
var i, l, rules, rule, $grid = $('#list'),
postData = $grid.jqGrid('getGridParam', 'postData'),
filters = $.parseJSON(postData.filters);
if (filters && typeof filters.rules !== 'undefined' && filters.rules.length > 0) {
rules = filters.rules;
for (i = 0; i < rules.length; i++) {
rule = rules[i];
console.log(rule.op);
if (rule.op === 'cn') {
// change contains to does not contain
rule.op = 'nc';
}
}
postData.filters = JSON.stringify(filters);
}
}
}}).navButtonAdd('#pager',{
caption: "Contains",
buttonicon:"ui-icon-disk",
onClickButton: function(){
containsOrNot = 'contains';
$("#list")[0].triggerToolbar();
},
position:"last"
}).navButtonAdd('#pager',{
caption: "Excludes",
buttonicon:"ui-icon-disk",
onClickButton: function(){
containsOrNot = 'notContains';
$("#list")[0].triggerToolbar();
},
position:"last"
});
jQuery('#list').jqGrid('gridResize');
});
В моей сетке уже есть код для запуска поиска на панели инструментов.
выполняет поиск на панели инструментов при нажатии кнопки, определенной в нижней части колонтитула.
В настоящее время поиск по умолчанию содержит. поэтому, когда я выбираю текст из любого столбца, фильтр этого столбца заполняется этим выбранным текстом. И когда я нажимаю кнопку «Содержит», панель инструментов триггера запускается правильно.
Что я хотел бы сделать? когда я нажимаю кнопку «Исключить», она должна активировать другую панель инструментов триггера, но с фильтром
не содержит . Как я могу динамически изменить фильтр по умолчанию для определенного столбца?
Изменить jqGrid версии 4.8.2
ОБНОВЛЕНИЕ Благодаря другому ответу Олега здесь и текущему ответу я смог добиться этого. Код обновляется и работает как требуется.
Подробнее здесь:
https://stackoverflow.com/questions/307 ... tton-click
1735198707
Anonymous
Это моя jqgrid [img]https://i.sstatic.net/5j1k0.jpg[/img] Код, связанный с сеткой [code]var lastsel2; var containsOrNot = 'contains'; jQuery(document).ready(function(){ jQuery("#list").jqGrid({ url: "{{ asset('/app_dev.php/_thrace-datagrid/data/item_lookup_management') }}", postData: { masterGridRowId: {{ VPK }} }, datatype: "json", mtype: 'POST', colNames: ['Item No', 'Description 1', 'Vendor Item No','Report Dec','Location','On Hand','Exp balance','Available now','Lead Time','Type', 'Vendor #', 'Status', 'Stocked', 'Product Line', 'Creator'], colModel: [ { name: "I_ItemNumID", index: "u.I_ItemNumID", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '70' }, { name: "I_Desc1", index: "u.I_Desc1", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '70' }, { name: "I_VendorItemNum", index: "u.I_VendorItemNum", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "I_ReportDec", index: "u.I_ReportDec", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "I_BinNum", index: "u.I_BinNum", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "I_OnHandTotal", index: "u.I_OnHandTotal", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "R_ClosingBalance", index: "u.R_ClosingBalance", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "R_BalanceActual", index: "u.R_BalanceActual", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "I_LeadTime", index: "u.I_LeadTime", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "I_ItemType", index: "u.I_ItemType", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "I_VendorNumID", index: "u.I_VendorNumID", editable: false, align: 'left', searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, width: '100' }, { name: "I_Status", index: "u.I_Status", editable: false, width: 100, searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, align: 'left' }, { name: "I_isStocked", index: "u.I_isStocked", editable: false, width: 100, searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, align: 'left' }, { name: "I_ProductLine", index: "u.I_ProductLine", editable: false, width: 150, searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, align: 'left' }, { name: "I_CreatedSysUser", index: "u.I_CreatedSysUser", editable: false, width: 100, searchoptions:{sopt:['cn','eq','ne','lt','le','gt','ge','bw','ew','nc']}, align: 'left' } ], ondblClickRow: function(rowid) { var rowData = jQuery('#list').jqGrid ('getRowData', rowid); window.opener.document.getElementById('productDetail_V_PK').value = rowid; window.opener.document.getElementById('productDetail_V_Desc').value = rowData.I_ItemNumID; window.close(); }, height: 400, rowNum: 50, rowTotal: 1000000, width: 3000, gridview: true, autoencode: false, pager: '#pager', shrinkToFit: true, sortable: true, sortname:"u.id", sortorder: "desc", viewrecords: true, //multiselect: true, loadonce:false, onCellSelect: function(row, col, content, event) { var cm = jQuery("#list").jqGrid("getGridParam", "colModel"); //alert(cm[col].name); if (window.getSelection) { selection = window.getSelection(); } else if (document.selection) { selection = document.selection.createRange(); } selectionColumn = cm[col].name; selection.toString() !== '' && $("#gs_"+selectionColumn).val(selection.toString()); }, rowList: [50, 100, 500, 1000] }); jQuery("#list").jqGrid('navGrid',"#pager",{ del:false, add:false, edit:false},{multipleSearch:true}).navButtonAdd('#pager',{ caption: "Select", buttonicon:"ui-icon-disk", onClickButton: function(){ var myGrid = $('#list'); selectedRowId = myGrid.jqGrid ('getGridParam', 'selrow'); var rowData = jQuery('#list').jqGrid ('getRowData', selectedRowId); if(selectedRowId != null) { window.opener.document.getElementById('productDetail_V_PK').value = selectedRowId; window.opener.document.getElementById('productDetail_V_Desc').value = rowData.I_ItemNumID; window.close(); } else { $(function() { $( "#dialog-message" ).dialog({ modal: true, buttons: { Ok: function() { $( this ).dialog( "close" ); } } }); }); } }, position:"last" }); jQuery("#list").jqGrid('filterToolbar',{ searchOperators: true, stringResult: true, searchOnEnter : true, sopt: ['cn','eq','ne','lt','le','gt','ge','bw','ew','nc'], beforeSearch: function(){ if(containsOrNot == "notContains" && containsOrNot != "contains") { //CODE FOR EXCLUDE EXECUTE HERE var i, l, rules, rule, $grid = $('#list'), postData = $grid.jqGrid('getGridParam', 'postData'), filters = $.parseJSON(postData.filters); if (filters && typeof filters.rules !== 'undefined' && filters.rules.length > 0) { rules = filters.rules; for (i = 0; i < rules.length; i++) { rule = rules[i]; console.log(rule.op); if (rule.op === 'cn') { // change contains to does not contain rule.op = 'nc'; } } postData.filters = JSON.stringify(filters); } } }}).navButtonAdd('#pager',{ caption: "Contains", buttonicon:"ui-icon-disk", onClickButton: function(){ containsOrNot = 'contains'; $("#list")[0].triggerToolbar(); }, position:"last" }).navButtonAdd('#pager',{ caption: "Excludes", buttonicon:"ui-icon-disk", onClickButton: function(){ containsOrNot = 'notContains'; $("#list")[0].triggerToolbar(); }, position:"last" }); jQuery('#list').jqGrid('gridResize'); }); [/code] В моей сетке уже есть код для запуска поиска на панели инструментов. [code]$("#list")[0].triggerToolbar();[/code] выполняет поиск на панели инструментов при нажатии кнопки, определенной в нижней части колонтитула. В настоящее время поиск по умолчанию содержит. поэтому, когда я выбираю текст из любого столбца, фильтр этого столбца заполняется этим выбранным текстом. И когда я нажимаю кнопку «Содержит», панель инструментов триггера запускается правильно. Что я хотел бы сделать? когда я нажимаю кнопку «Исключить», она должна активировать другую панель инструментов триггера, но с фильтром [b]не содержит[/b]. Как я могу динамически изменить фильтр по умолчанию для определенного столбца? Изменить jqGrid версии 4.8.2 [b]ОБНОВЛЕНИЕ[/b] Благодаря другому ответу Олега здесь и текущему ответу я смог добиться этого. Код обновляется и работает как требуется. Подробнее здесь: [url]https://stackoverflow.com/questions/30790137/jqgrid-dynamically-change-search-operator-type-on-button-click[/url]