使用loadonce重新加载jqgrid:true

时间:2011-08-15 16:05:52

标签: jquery jqgrid

我是使用jqgrid的新手。

当新页面加载时,网格正在从数据库中正确加载数据。之后由于loadonce:true,网格没有从数据库重新加载数据以进行添加/编辑/删除。

我的应用程序组合是JSP,Servlet,MySQL

我有一个包含以下设置的网格

jQuery("#userList").jqGrid({
                    url: '<%=request.getContextPath()%>/userJqGrid?q=1&action=fetchData&userCookie=<%= encodedCookie%>',
                    datatype: 'xml',
                    mtype: 'GET',
                    colNames:['<%= userProp.getProperty(userColNames[0])%>',
                              '<%= userProp.getProperty(userColNames[1])%>',
                              '<%= userProp.getProperty(userColNames[2])%>',
                              '<%= userProp.getProperty(userColNames[3])%>',
                              '<%= userProp.getProperty(userColNames[4])%>',
                              '<%= userProp.getProperty(userColNames[5])%>'
],
                    colModel:[
                        {name:'<%= userColNames[0]%>',index:'<%= userColNames[0]%>',
                            width:120,sortable:true,editable:true,editrules:{required:true},formoptions:{rowpos:1, elmprefix:'*'}},
                        {name:'<%= userColNames[1]%>',index:'<%= userColNames[1]%>',
                            width:130,sortable:true,editable:true},
                        {name:'<%= userColNames[2]%>',index:'<%= userColNames[2]%>',
                            width:100,sortable:true,editable:true,editrules:{required:true},formoptions:{rowpos:3, elmprefix:'*'}},
                        {name:'<%= userColNames[3]%>',index:'<%= userColNames[3]%>',
                            width:180,sortable:true,editable:true,editrules:{email:true,required:true},formoptions:{rowpos:4, elmprefix:'*'}},
                        {name:'<%= userColNames[4]%>',index:'<%= userColNames[4]%>', 
                            width:100,sortable:true,editable:true},
                        {name:'<%= userColNames[5]%>',index:'<%= userColNames[5]%>', 
                            width:100,sortable:true,editable:true},
                    ],
                    pager: '#pager1',
                    rowNum:50,
                    height:'auto',
                    //rowList:[10,20,30],
                    loadonce: true,
                    sortname:'<%= userColNames[0]%>',
                    viewrecords: true,
                    editurl:'<%=request.getContextPath()%>/userJqGrid?q=1&action=addData&userCookie=<%= encodedCookie%>',
                    caption: 'User Grid',
                    ondblClickRow: function(rowid) {
                       $("#userList").jqGrid('editGridRow',rowid, userEditParam);
                        return;
                    }
                 });
$("#userList").jqGrid('navGrid',"#pager1",{add:true,edit:true,del:true});
$("#userList").jqGrid('gridResize', { minWidth: 450, minHeight: 150});

我尝试添加以下代码来重新加载

$("#userList").jqGrid('setGridParam',{datatype:xml}).trigger('reloadGrid')

有人能帮忙吗?

适用于我的解决方案

$("#userList").jqGrid('navGrid',"#pager1",{add:true,edit:true,del:true,refresh:true,

beforeRefresh: function() {
   $("#userList").jqGrid('setGridParam',{datatype:xml}).trigger('reloadGrid');
}},
{
  afterSubmit: processAddEdit,
       closeAfterAdd:true,
       closeAfterEdit:true
},{
  aftersubmit:processAddEdit,
       closeAfterAdd:true,
       closeAfterEdit:true
});

function processAddEdit() {
  $("#userList").jqGrid('setGridParam',{datatype:xml}).trigger('reloadGrid');
  return[true,'']; //no error
}

3 个答案:

答案 0 :(得分:9)

正确是datatype:'xml'而不是datatype:xml。所以像

这样的代码
$("#userList").jqGrid('setGridParam', {datatype:'xml'})
              .trigger('reloadGrid', [{page:1}]);

应该有效。有关reloadGrid的其他参数的说明,请参阅here

更新:从您的评论中我希望我知道您在哪里遇到实施问题。如果我理解你现在正确,你想要从导航栏中“重新加载网格”按钮从服务器重新加载网格。为此,您应该使用您的实现重新定义标准的“重新加载网格”按钮,该按钮执行我在答案中包含的代码(参见上文)。因此,您应该使用refresh: false作为navGrid选项删除标准的“重新加载网格”按钮,然后使用navButtonAdd添加看起来与标准按钮完全相同的新按钮,并使用自定义实现或onClickButton事件:

var myGrid = $('#userList');
myGrid.jqGrid({
    datatype: 'xml',
    loadonce: true,
    pager: '#pager1',
    // ... other parameters which you use
});
myGrid.jqGrid('navGrid', '#pager1', {refresh: false});
myGrid.jqGrid(
    'navButtonAdd',
    '#pager1',
    {
        caption: "",
        buttonicon: "ui-icon-refresh",
        title: $.jgrid.nav.refreshtitle,
        onClickButton: function () {
            $(this).jqGrid('setGridParam', {datatype:'xml'});
            $(this).trigger('reloadGrid', [{page:1}]);
        }
    }
);

更新2 :要在添加和编辑操作后强制重新加载网格,您可以使用afterSubmit事件,该事件将在接收成功的服务器响应后调用,但在{{1}之前调用由jqGrid制作。

reloadGrid

我不确定在编辑和删除操作之后是否真的需要从服务器重新加载网格,但是如果服务器没有在服务器响应中返回新的id,则可能需要在添加操作之后重新加载 即可。您可以设置myGrid.jqGrid('navGrid', '#pager1', {refresh: false}, { // Edit options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'']; // no error } }, { // Add options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'',false]; // no error and no new rowid } }, { // Delete options afterSubmit: function () { $(this).jqGrid('setGridParam', {datatype:'xml'}); return [true,'']; // no error } } ); 并在服务器响应中返回新ID。有关详细信息,请参阅thisthis个答案。

答案 1 :(得分:0)

谢谢,

        $("#list1").jqGrid('navGrid', '#pager1', {refresh: false},
{ // Edit options
    afterSubmit: function () {$(this).jqGrid('setGridParam', {datatype:'xml'});
        return [true,'']; // no error
    }
},
{ // Add options
    afterSubmit: function () {
        $(this).jqGrid('setGridParam', {datatype:'xml'});
        return [true,'',false]; // no error and no new rowid
    }
},
{ // Delete options
    afterSubmit: function () {
        $(this).jqGrid('setGridParam', {datatype:'xml'});
        return [true,'']; // no error
    }
});  jQuery("#list1").jqGrid('navGrid','#pager1',{edit:true,add:true,del:true,view:false},{url: "product.php" },{closeAfterEdit: true,closeAfterAdd: true});
       jQuery("#list1").jqGrid('gridResize',{minWidth:350,maxWidth:850,minHeight:80, maxHeight:350}).trigger('reloadGrid');
       $('#list1').jqGrid('setGridParam', {datatype:'xml'});
       $('#list1').trigger('reloadGrid', [{page:1}]);

对我有用。再次感谢你。

答案 2 :(得分:0)

{
    // edit options
    zIndex: 100,
    url: '/User/Edit',
    closeOnEscape: true,
    closeAfterEdit: true,
    recreateForm: true,

    afterComplete: function (response) {
        if (response.responseText) {
            $("#userGrid").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
        }
    }
}

为我工作:

逻辑是我们在调用返回到JqGrid之后再次重新加载网格....尝试它的工作