【问题标题】:jqGrid loadComplete fires before data filled grid - sum function show previously valuesjqGrid loadComplete 在数据填充网格之前触发 - sum 函数显示以前的值
【发布时间】:2012-06-13 08:43:56
【问题描述】:

我有问题。 LoadComplete 在数据传递到网格之前触发。

我有这个表格:

我通过 jquery Post 将新行数据传递到服务器。并通过

刷新网格
$('#grid').trigger("reloadGrid");

在该事件引发并运行此函数alert($('#grid').jqGrid('getCol', 'Unit', false, 'sum');) 之后显示先前的值(在我添加项目之前的实际值)。所以如果我有两行,值在哪里

我添加了第三个值 - 1。弹出显示 2,但预期 3。 如果我删除行我有同样的问题 我的网格:

jQuery("#grid").jqGrid({
        caption: 'Timesheet',
    url:'/GetData',
        editUrl: '/EditRow'
    datatype: "json",
    colNames: ['Id','Start Time', 'End Time', 'Unit'],
        colModel: [
                     { name: 'Id', index: 'Id' },
                     { name: 'StartTime', index: 'StartTime' },
                     { name: 'EndTime', index: 'EndTime' },
                     { name: 'Unit', index: 'Unit' }
                 ],
    rowNum:10,
    rowList:[10,20,30],
    pager: '#pager2',
    sortname: 'id',
    viewrecords: true,
    sortorder: "desc",
    postData: { entityId: function () {
                    return $('#GetId').val();
                },
                loadComplete: function (data) {
                      **alert($('#grid').jqGrid('getCol', 'Unit', false, 'sum');)**
                    }
    
});
jQuery("#grid").jqGrid('navGrid','#pager2',{edit:false,add:true,del:false});

添加示例。 http://jsfiddle.net/5bmVt/1/

已编辑。 修改示例 http://jsfiddle.net/SUvvW/1/

【问题讨论】:

  • 您写了“我添加了第三个值 - 1”。你是什​​么意思?您是否使用addRowData 在客户端再添加一行,或者服务器上的数据已更改并重新加载整个网格?这是网格的其他设置(datatypeloadonce)。您使用哪个版本的 jqGrid?在代码中可以看到诸如delUrlhidePagingreadonlygetRowsUrlgridSettingsprmSearch 之类的选项,这些选项在 jqGrid 中不存在loadCompletepostDatacmTemplate 等其他设置位于 gridSettings 内部。因此,您发布的代码绝对不清楚。
  • Oleg,首先感谢您在其他主题中的回答。我用你的答案解决了很多问题。我们使用一些框架来包装 jqGrid 的默认设置。 1. 是的 - 我使用 addRowData 在客户端上又添加了一行。在它事件抛出并显示以前的值之后。
  • 2.我将网格代码修改为默认视图。
  • 最后一个版本的代码仍然没有包含您遇到问题的最重要部分:我看不到使用addRowData 的行。在图片一看到 2 行。如果您准备 2 或 3 行可以重现问题的完整演示,那将是最好的。此外,当前代码包含sortname: 'id',但不存在'id' 列。您使用$('#GetId'),但不存在 HTML 片段。您从jQuery("#list2") 创建网格,但使用来自 $('grid').jqGrid('getCol', ... 的警报。$('grid') 是什么?甚至不是$('#grid')。所以我真的不明白它对谁有用。
  • 你说得有道理。我马上改。

标签: jqgrid


【解决方案1】:

代码

alert($('grid').jqGrid('getCol', 'Unit', false, 'sum'));

好像我错了。可能是这样的

alert($('#grid').jqGrid('getCol', 'Unit', false, 'sum'));

但最好在loadComplete 和其他回调中使用$(this)

alert($(this).jqGrid('getCol', 'Unit', false, 'sum'));

更新:您的演示代码中的主要问题是loadComplete 将在您填充数据之前被调用。此外,关于addRowData 填充网格是我所知道的最慢的方式。您应该对网格的所有数据使用data 参数并另外使用gridview: true 以提高性能。查看修改后的演示here

【讨论】:

  • 您能准确描述一下您遇到的问题吗?您更改了问题的代码,因此我当前的答案与问题不符。在问题中,您确定使用不是您测试的代码,因此不是具有描述问题的代码。例如,对于navGrid,您使用jQuery("#list2") 而不是jQuery("#grid")。目前尚不清楚如何以及何时将“第三个值”添加到网格中。你能包括相应的代码。最好是重现问题的完整代码和可以保存在文件中的服务器的 JSON 数据。
  • -不是您测试的代码,因此不是具有描述问题的代码-。我知道。但是我们使用了未用于此问题的框架。所以我只是将代码格式化为“默认”视图。
  • -最好是重现问题的完整代码和来自服务器的 JSON 数据可以保存在文件中-如果没有想法我会稍后再做。
  • @IvanKorytin:我知道您使用了一些框架,但是我可以如何帮助您解决问题?如果您要在一些演示示例中重现所描述的问题,我将能够为您提供帮助,您将在原始代码中转移建议。如果您写到问题发生在“添加第三个值”之后,那么发布相应的代码片段非常重要。无论如何,您应该准备重现问题的演示。您可以在准备演示的过程中自己找到问题的原因,或者其他人可以帮助您进行演示。
  • 我的框架默认隐藏了一些字段。它自己什么也做不了。好的,我会尝试为它做演示。
【解决方案2】:

问题出在我的代码中。所以这不是 jq Grid 问题。

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 2016-07-07
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2015-03-03
    • 2011-05-26
    相关资源
    最近更新 更多