【问题标题】:How to reload data from dataUrl : jqGrid如何从 dataUrl 重新加载数据:jqGrid
【发布时间】:2012-10-11 14:25:18
【问题描述】:

我用的是jqgrid,里面加了一个子网格,如下图,

如您所见,
具有 11 和 13 列的行是主网格行

每一行都有感兴趣的子网格, 添加记录元素显示子网格的添加弹出窗口

这是子网格的代码,

subGridRowExpanded: function(subgrid_id, row_id) {
            var subgrid_table_id, pager_id;
            subgrid_table_id = subgrid_id+"_t";
            pager_id = "p_"+subgrid_table_id;
            $("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>");
            jQuery("#"+subgrid_table_id).jqGrid({
                url:"shops?q=2&ShopID="+row_id,
                datatype: "xml",
                colNames: ['Interest'],
                colModel: [
                    //{name:"Id",index:"ShopID",width:80,editable:false,editoptions:{readonly:false,size:40}}, //Shop ID not required
                    {name:"id",index:"id",editable:true,edittype:"select",editoptions:{dataUrl:'shops?q=3&ShopID='+row_id},editrules:{required:true}}
                ],
                rowNum:10,
                pager: pager_id,
                width: '100%',
                height: '100%',
                scrollOffset: 0,
                sortname: 'num',
                sortorder: "asc",
                height: '100%',
                editurl:'shops?q=5&ShopID='+row_id
            });
            jQuery("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{edit:false,add:true,del:true})
        },
        subGridRowColapsed: function(subgrid_id, row_id) {
            // this function is called before removing the data
            //var subgrid_table_id;
            //subgrid_table_id = subgrid_id+"_t";
            //jQuery("#"+subgrid_table_id).remove();
        }

一旦我们从弹出窗口中添加值,它就会转到主网格相应行的兴趣选项卡,并且应该从弹出窗口中删除添加的值。

当前值已成功添加,但它仍停留在弹出窗口中,直到我们刷新主窗体。

提交后有没有办法重新加载添加弹出窗口?

感谢您的宝贵时间,谢谢

【问题讨论】:

    标签: jquery jquery-ui jqgrid


    【解决方案1】:

    如果您在dataUrl 的响应中设置HTTP 标头"Cache-Control: private, max-age=0"(参见herehere),问题可能会得到解决。如果您使用 ASP.NET,我建议您阅读 the answer

    您也可以使用该选项

    ajaxSelectOptions: { cache: false }
    

    (见the answer)。

    如果以上都没有帮助,您可以使用ajaxSelectOptions.data 作为函数,这将允许您发送ShopID 参数的不同值dataUrl。详情请见the answer

    更新:我建议您另外使用添加和编辑表单的recreateForm: true 选项。请参阅here 的用法示例。

    【讨论】:

    • 嗨 Oleg,实际上,除非我重新加载表单,否则我无法操作动态弹出内容,但 jqGrid 有 afterSubmit 事件,我们可以在提交后在那里操作内容。感谢您的回答
    • @pradeep:afterSubmit 的目标是处理来自服务器响应的一些附加数据,并在网格数据中进行附加修改。示例:您保存数据,服务器生成新的 Id、TimstampOfLastChange 等您保存在网格中的数据。我通常使用rowversion,它存在于数据库表的每一行中。它允许我实现乐观并发。如果我正确理解您的问题,您的问题只是因为缓存了来自dataUrl 的先前响应。这是另一种情况。
    • @pradeep:例如,用户可以打开某个表单进行编辑,然后取消编辑。在这种情况下,afterSubmit不会被调用。在这种情况下,您是否也需要对dataUrl 进行一些修改?还是我没有正确理解您的问题?
    • @pradeep:另外我建议您使用添加和编辑表单的recreateForm: true 选项。请参阅here 示例。
    【解决方案2】:

    找到解决方案,

    其实我们可以使用 afterSubmit 事件,

    可以在这两个链接中找到解决方案

    How to close form and reload grid after submit in jqgrid?

    http://www.trirand.com/blog/?page_id=393/help/how-to-reload-edit-form-after-submit/

    谢谢,如果有人需要更多解释,请发表评论

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多