【问题标题】:jqGrid: navGrid reloadAfterSubmit does not add a new row when editurl is not validjqGrid:当editurl无效时,navGrid reloadAfterSubmit不会添加新行
【发布时间】:2012-06-08 16:17:41
【问题描述】:

我正在尝试在 jqGrid 中测试添加新行和删除行,我发现在添加/删除行后网格不会刷新以显示新行或删除已删除的行。服务器端部分还没有用于添加/删除,所以我只是为 editurl 提供了与将数据加载到网格中相同的 url。

.navGrid('#' + id + '-pager',
            {addtext: 'Add Code Value', deltext: 'Delete Code Value', edit:false,add:true,del:true,search:false, refresh:false},
            {closeAfterAdd: true, reloadAfterSubmit: true} /* Edit options */,
            {closeAfterAdd: true, reloadAfterSubmit: true} /* Add options */,
            {reloadAfterSubmit: true} /* Delete options */);

我在这里遗漏了什么吗?我认为 reloadAfterSubmit 应该使用添加/删除的行更新网格?

谢谢。

已编辑:我的自定义添加功能,这是不必要的复杂是(注意:这应该是一个客户端只添加)

addfunc = function() {
//Find dirty unsaved row if any and add to the grid before adding empty row

                var dirtyRow = jQuery('#' + id).find('tr[editable]');
                var dirtyRowId = dirtyRow.attr('id');
                if (dirtyRow.length > 0) {
                    dirtyRow.addClass('data-isDirty', true);
                    var rowData = jQuery('#' + id).jqGrid('getRowData', dirtyRowId);
                    jQuery('#' + id).jqGrid('addRowData', rowId, dirtyRowId);
              //The row when added to the grid should not be editable but a normal row

                dirtyRow.find('input').each(function() {
                        var text = jQuery(this).attr('value');
                        jQuery(this).replaceWith(text);
                    });
                }
                var rowId = Math.floor(Math.random()*1000) + 'add_new';
                jQuery('#' + id).jqGrid('addRowData', rowId, that.getEmptyRow(colModel), 'first');
                var firstRowId = jQuery('#' + id).jqGrid('getDataIDs')[0];

                            //Add an empty editable row at the top
                jQuery('#' + id).jqGrid('editRow', firstRowId);
            }

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    如果您使用 dummy URL,那么它可能不会响应 HTTP POST 请求。您可以通过使用mtype: "GET" 选项来解决问题。在这种情况下,您可以使用来自同一站点的任何现有服务器 URL,例如 "/"

    .navGrid('#' + id + '-pager',
        {addtext: 'Add Code Value', deltext: 'Delete Code Value',
            edit:false,add:true,del:true,search:false, refresh:false},
        {mtype: "GET", closeAfterAdd: true, reloadAfterSubmit: true} /* Edit options */,
        {mtype: "GET", closeAfterAdd: true, reloadAfterSubmit: true} /* Add options */,
        {mtype: "GET", reloadAfterSubmit: true} /* Delete options */);
    

    作为 jqGrid 的 editurl 参数,您可以使用任何现有的 URL,例如 editurl: "/"

    【讨论】:

    • 嗯...仍然没有看到正在添加的新行。如果我希望在客户端添加新行而不向服务器发送任何更改,我需要做什么?
    • 这个 url 似乎演示了如何在本地添加行而不发布到服务器,但我无法弄清楚我必须设置什么参数才能启用它:trirand.com/blog/jqgrid/jqgrid.html
    • @Ramya:在本地添加新行非常简单:您可以使用addRowData。看来我不是您在问题中提出的问题。
    • 我想我正在尝试做一些简单的事情,但我的代码反映了其他情况:) 所以,我试图单击导航网格添加按钮并在网格中显示一个空的可编辑行。当我单击添加按钮时,该行将自动显示编辑模式下的输入框。没有需要发生的服务器端帖子。网格的初始数据加载来自 json 格式的服务器。我编辑了原始帖子以添加我用来添加可编辑行的自定义 addfunc。当用户再次单击添加时,行数据被添加到网格客户端,并且一个新的可编辑行启动
    • 我想知道是否有更简单的方法可以做到这一点?感谢@Oleg 提供帮助...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2010-11-28
    • 2011-04-13
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多