Javascript JQGRID:更改计算单元的值后保存行
我被这个问题困住了。我有一个带子网格的网格。编辑列的单元格值时,我的函数遍历所有子网格行,从该列获取所有值,并更改打开该子网格的父行的列的值 这是我的函数代码:Javascript JQGRID:更改计算单元的值后保存行,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我被这个问题困住了。我有一个带子网格的网格。编辑列的单元格值时,我的函数遍历所有子网格行,从该列获取所有值,并更改打开该子网格的父行的列的值 这是我的函数代码: function reloadGrid(rowid, dataResponse) { $('#' + rowid).parent().trigger('reloadGrid'); } function calculate(rowid, cellname, value, iRow, iCol) { var id = $.
function reloadGrid(rowid, dataResponse) {
$('#' + rowid).parent().trigger('reloadGrid');
}
function calculate(rowid, cellname, value, iRow, iCol) {
var id = $.jgrid.stripPref("_" + $.jgrid.stripPref(subGrid.getGridParam('idPrefix'), rowid), rowid);
id = $.jgrid.stripPref("s_", id);
var ids = subGrid.getDataIDs();
var result = 0.0;
for (var i = 0; i < ids.length; i++) {
result = result + parseFloat(subGrid.getCell(ids[i], 'value'));
}
grid.setCell(id, 'Total', result);
reloadGrid(rowid);
}
我想要的是保存父行,该父行在单元格更改其值后打开子网格
提前谢谢
注:grid
和subGrid
变量在JS开头定义。我认为没有必要解释什么包含这些变量
更新
已经解决了,谢谢大家。
我要做的是在当前编辑的行中使用
$.jgrid.stripRef(…)
获取父网格的行id
。使用函数,每次保存编辑的子网格数据时,我都会调用该函数,该函数从子网格中的import
列获取所有值并求和。在获得总值后,只需执行grid.editCell(row_id,'total',sumResult)
,var data=grid.getRowData(row_id)
,并对同一URL
执行ajax调用,在该调用中我发送编辑的数据,就像通过表单发送一样:
这就是我想做的。我不知道这是否清楚,但我有解决办法。如果有人不明白什么,就问吧<强>;)对不起,很难理解你在做什么。您写了“计算单元”,但并没有包括列的定义。您写了关于保存行的内容,但没有提到任何编辑模式。从内联编辑中可以间接看到您使用了saveRow
,尽管大多数情况下并不要求您直接调用saveRow
。完全不清楚为什么需要在修改主网格的基础上修改子网格。通常,每次扩展子网格时,都会从服务器加载子网格,因此不需要修改子网格。编辑行时,在editOptions
中使用afterSave
属性,然后执行inlineEdit
并调用calculate
函数。我需要这样做,将计算字段从父网格保存到数据库中。我必须将一个基本的桌面应用程序导入到JavaWeb应用程序中,他们就是这样做的。网格->单击展开行并加载子网格->如果您更改了某些内容并按save,它会将数据发送到服务器,重新计算子网格的总奖金,并将该值放在父行'total'
列中。我需要的是,当它重新计算时,将已修改的行保存在其中。@Oleg在开始时忘记说我在子网格中使用afterSave
,并且在编辑子网格中的一行后调用该函数。对不起,我不想再回答一个包含多个“更新”部分和45条注释的问题。您应该想象一下,您与了解jQuery和jqGrid的人交谈,并简短地解释了您遇到的问题。所以你应该修改你的问题,使它完全清楚。您可以包括图片、演示(例如在JSFIDLE中)或任何其他内容。这个问题应该足够清楚,不需要在评论中提出额外的问题。我的问题是,我间接地了解到您在主网格和子网格之间有一些公共数据或某些关系,但我完全不知道您在做什么。为了能帮助你,我首先需要了解你在做什么。我不明白为什么很难解释清楚你在做什么。为什么你不想编辑问题的文本并解释你所做的事情?很抱歉
grid.saveRow(id, function(){alert("It works!");}, 'foo/edit.html?identifier=' + grid.getCell(id, 'identifier'));
$.ajax({
url: 'foo/edit.html?identifier=' + data.identifier,
type: 'PUT',
dataType: 'json',
contentType: 'application/json;charset=utf-8',
data: JSON.stringify(data),
success: null,
error: function(jqXHR, status, errorText) {
alert("HTTP Status code: " + jqXHR.status + "\nStatus text: "
+ status + "\nError: " + errorText);
}
});