2011-08-16 42 views
0

我正在使用jqgrid,一次加載數據,在本地排序和過濾,並在每次更新/插入/刪除後進行刷新。它工作正常,除此之外,如果我使用過濾器(在網格頂部),過濾器在刷新後保持不變,但過濾器不會重新應用於新加載的數據。 我試圖在用觸發器('reloadGrid')重新加載網格後調用mygrid [0] .triggerToolbar(),但沒有任何效果。jqgrid在重新加載後應用過濾器?

感謝任何幫助或指針:-)下面

代碼:

var lastsel; 
var mygrid; 
var currentLang; 

//setup grid with columns, properties, events 
function initGrid(lang, productData, resellerData, resellerSearchData) { 


    mygrid = jQuery("#list2").jqGrid({ 
    //data loading settings 
    url: '/public/Gadgets/LinkGadget/ProductLinks/' + lang, 
    editurl: "/public/Gadgets/LinkGadget/Edit/" + lang, 
    datatype: "json", 
    mtype: 'POST', 
    jsonReader: { 
     root: "rows", 
     cell: "", 
     page: "currpage", 
     //total: "totalrecords", 
     repeatitems: false 
    }, 
    loadError: function (xhr, status, error) { alert(status + " " + error); }, 
    //column definitions 
    colNames: ['Id', 'ProductId', 'Reseller Name', 'Link', 'Link Status'], 
    colModel: [ 
    { name: 'Id', index: 'Id', width: 40, sortable: false, resizable: true, editable: false, search: false, key: true, editrules: { edithidden: true }, hidden: true }, 
    { name: 'ProductId', index: 'ProductId', width: 190, sortable: true, sorttype: 'text', resizable: true, editable: true, search: true, stype: 'select', edittype: "select", editoptions: { value: productData }, editrules: { required: true} }, 
    { name: 'ResellerName', indexme: 'ResellerName', width: 190, sortable: false, sorttype: 'text', resizable: true, editable: true, search: true, stype: 'select', edittype: "select", editoptions: { value: resellerData }, editrules: { required: true }, searchoptions: { sopt: ['eq'], value: resellerSearchData} }, 
    { name: 'Link', index: 'Link', width: 320, sortable: true, sorttype: 'text', resizable: true, editable: true, search: true, edittype: "textarea", editoptions: { rows: "3", cols: "50" }, editrules: { required: true }, searchoptions: { sopt: ['cn']} }, 
    { name: 'LinkStatus', index: 'LinkStatus', width: 100, sortable: false, resizable: true, editable: false, search: false, formatter: linkStatusFormatter}], 
    //grid settings 
    //rowList: [10, 25, 50], 
    rowNum: 20, 
    pager: '#pager2', 
    sortname: 'ProductId', 
    sortorder: 'asc', 
    height: '100%', 
    viewrecords: true, 
    gridview: true, 
    loadonce: true, 
    viewsortcols: [false, 'vertical', true], 
    caption: " Product links ", 
    //grid events 
    onSelectRow: function (id) { 
     if (id && id !== lastsel) { 
      if (lastsel == "newid") { 
       jQuery('#list2').jqGrid('delRowData', lastsel, true); 
      } 
      else { 
       jQuery('#list2').jqGrid('restoreRow', lastsel); 
      } 
      jQuery('#list2').jqGrid('editRow', id, true, null, afterSave); //reload on success 
      lastsel = id; 
     } 
    }, 
    gridComplete: function() { 
     //$("#list2").setGridParam({ datatype: 'local', page: 1 }); 
     $("#pager2 .ui-pg-selbox").val(25); //changing the selected values triggers paging to work for some reason 
    } 
}); 

//page settings 
jQuery("#list2").jqGrid('navGrid', '#pager2', 
     { del: false, refresh: false, search: false, add: false, edit: false } 
); 

//refresh grid button 
jQuery("#list2").jqGrid('navButtonAdd', "#pager2", { caption: "Refresh", title: "Refresh grid", buttonicon: 'ui-icon-refresh', 
    onClickButton: function() { 
     reload(); 
    } 
}); 

//clear search button 
jQuery("#list2").jqGrid('navButtonAdd', "#pager2", { caption: "Clear search", title: "Clear Search", buttonicon: 'ui-icon-refresh', 
    onClickButton: function() { 
     mygrid[0].clearToolbar(); 
    } 
}); 

//add row button 
jQuery("#list2").jqGrid('navButtonAdd', '#pager2', { caption: "New", buttonicon: 'ui-icon-circle-plus', 
    onClickButton: function (id) { 
     var datarow = { Id: "newid", ProductId: "", ResellerName: "", Link: "" }; 
     jQuery('#list2').jqGrid('restoreRow', lastsel); //if editing other row, cancel this 
     lastsel = "newid"; // id; 
     var su = jQuery("#list2").addRowData(lastsel, datarow, "first"); 
     if (su) { 
      jQuery('#list2').jqGrid('editRow', lastsel, true, null, afterSave); //reload on success 
      jQuery("#list2").setSelection(lastsel, true); 
     } 
    }, 
    title: "New row" 
}); 

//delete row button 
jQuery("#list2").jqGrid('navButtonAdd', "#pager2", { caption: "Delete", title: "Delete row", buttonicon: 'ui-icon-circle-minus', 
    onClickButton: function() { 
     if (lastsel) { 
      if (confirm('Are you sure you want to delete this row?')) { 
       var url = '/public/Gadgets/LinkGadget/Edit/' + currentLang; 
       var data = { oper: 'del', id: lastsel }; 
       $.post(url, data, function (data, textStatus, XMLHttpRequest) { 
        reload(); 
       }); 
       lastsel = null; 
      } 
      else { 
       jQuery("#list2").resetSelection(); 
      } 
     } 
     else { 
      alert("No row selected to delete."); 
     } 
    } 
}); 
jQuery("#list2").jqGrid('filterToolbar'); 
} 

//Used by initGrid - formats link status column by adding button 
function linkStatusFormatter(cellvalue, options, rowObject) { 
if (rowObject.Id != "newrow") 
    return "<input style='height:22px;width:90px;' type='button' " + "value='Check link' " + "onclick=\"CheckLink(this, '" + rowObject.Id + "'); \" />"; 
else 
    return ""; 
} 

//Used by initGrid - reloads grid 
function reload() { 

//jqgrid setting "loadonce: true" will reset datatype from json to local after grid has loaded. "datatype: local" 
// does not allow server reloads, therefore datatype is reset before trying to reload grid 
$("#list2").setGridParam({ datatype: 'json' }).trigger('reloadGrid'); 
//mygrid[0].clearToolbar(); 
lastsel = null; 

//Comments: after reload, toolbar filter is not applied to refreshed data. Tried row below without luck 
//mygrid[0].triggerToolbar(); 
} 

    //after successful save, reload grid and deselect row 
function afterSave() { 
    reload(); 
} 
+0

還沒想出一個真正的解決方案,所以我做了一個醜陋的解決方法 - 重新加載網格後,我檢查是否應用了任何過濾器,然後模擬點擊重新應用過濾器的標題,出於某種原因。點擊也做了排序,但由於已經應用了等值過濾器,所以用戶不會注意到這一點。一個js計時器使「確定」網格已被重新加載。 – Markus

+0

忘記密碼: //一些ex代碼 //在鏈接標題上排序: clickSort(「#jqgh_list2_Link」); } function clickSort(selector){ if(selector && selector!=「」) var t = setTimeout(「$('」+ selector +「').click();」,1500); } – Markus

回答

0

您的數據沒有得到重新綁定到電網後保存/更新刪除

相關問題