jqgrid randId()在重新加载页面后生成重复项

jqgrid randId()在重新加载页面后生成重复项,jqgrid,Jqgrid,在我的表格中,当用户在最下面一行输入文本后,我将添加另一行,以便他们可以在需要时填写另一行。网格将根据用户的需要增长。这可以正常工作,但是在重新加载页面并从db填充之后,addrowdata()函数不尊重现有的行ID并创建重复项,再次从1开始,例如jqg1。它应该查看现有的行ID并创建新的唯一ID。所以如果我已经有5行了,它可能从jqg6开始。以下是onCellSelect中的相关代码: 我还尝试了$.jgrid.randId()而不是未定义的,结果与预期的相同 谢谢 Ryan我认为错误在于

在我的表格中,当用户在最下面一行输入文本后,我将添加另一行,以便他们可以在需要时填写另一行。网格将根据用户的需要增长。这可以正常工作,但是在重新加载页面并从db填充之后,addrowdata()函数不尊重现有的行ID并创建重复项,再次从1开始,例如jqg1。它应该查看现有的行ID并创建新的唯一ID。所以如果我已经有5行了,它可能从jqg6开始。以下是onCellSelect中的相关代码:



我还尝试了$.jgrid.randId()而不是未定义的,结果与预期的相同

谢谢


Ryan

我认为错误在于用数据库中的数据填充网格的部分。保存在数据库中的数据具有唯一的ID。ID的格式不是jqg1、jqg2。。。所以如果没有冲突。您应该只使用数据库中的id填充JSON的
id
字段

还有一种可能性是您只需自己指定
addRowData
rowid
参数(第一个参数)。在这种情况下,您将完全控制网格中添加的行的新ID

$.jgrid.randId
函数的代码非常简单。有初始化为
$.jgrid.uidPref
$.jgrid.guid
和初始化为1的
$.jgrid.guid。
$.jgrid.randId
函数执行以下操作

$.jgrid.randId=函数(前缀){
返回(前缀?前缀:$.jgrid.uidPref)+($.jgrid.guid++);
}

如果确实需要,您可以增加(但不是减少)
$.jgrid.guid
值,而不会产生任何负面影响。

我认为错误在于使用数据库中的数据填充网格的部分。保存在数据库中的数据具有唯一的ID。ID的格式不是jqg1、jqg2。。。所以如果没有冲突。您应该只使用数据库中的id填充JSON的
id
字段

还有一种可能性是您只需自己指定
addRowData
rowid
参数(第一个参数)。在这种情况下,您将完全控制网格中添加的行的新ID

$.jgrid.randId
函数的代码非常简单。有初始化为
$.jgrid.uidPref
$.jgrid.guid
和初始化为1的
$.jgrid.guid。
$.jgrid.randId
函数执行以下操作

$.jgrid.randId=函数(前缀){
返回(前缀?前缀:$.jgrid.uidPref)+($.jgrid.guid++);
}

如果确实需要,您可以增加(但不是减少)
$.jgrid.guid
值,而不会产生任何负面影响。

谢谢@Oleg,我希望您能回答。事实上,我正在将jqg1值保存到数据库中,并在重新加载页面时填充网格时使用这些ID重新填充网格。我希望网格创建我将保存在数据库中的唯一ID。这样,我就不必每次有人在客户端添加行时都去db,找到最大的增量。@krazy:我觉得不好。我知道的所有数据库都包含某种自动递增整数类型。例如,在SQL中,可以使用
int-IDENTITY(1,1)声明列不为NULL
int-PRIMARY-KEY-IDENTITY
。有关更多示例,请参见。使用JavaScript生成的ID更安全。您使用哪个数据库?问题是关于创建一个唯一的行id,我现在知道$.jgrid.randId不会查看现有的值。该表具有复合主键。我将创建自己的rowId,谢谢。@krazy:不客气!在使用复合键的情况下,我通常使用
key1+'.+key2+'.+key3
作为网格id,因为我在键内部没有下划线
'.
。这种简单的转换允许以非常简单的方式对复合密钥进行编码和解码。谢谢@Oleg,我希望你能回答。事实上,我正在将jqg1值保存到数据库中,并在重新加载页面时填充网格时使用这些ID重新填充网格。我希望网格创建我将保存在数据库中的唯一ID。这样,我就不必每次有人在客户端添加行时都去db,找到最大的增量。@krazy:我觉得不好。我知道的所有数据库都包含某种自动递增整数类型。例如,在SQL中,可以使用
int-IDENTITY(1,1)声明列不为NULL
int-PRIMARY-KEY-IDENTITY
。有关更多示例,请参见。使用JavaScript生成的ID更安全。您使用哪个数据库?问题是关于创建一个唯一的行id,我现在知道$.jgrid.randId不会查看现有的值。该表具有复合主键。我将创建自己的rowId,谢谢。@krazy:不客气!在使用复合键的情况下,我通常使用
key1+'.+key2+'.+key3
作为网格id,因为我在键内部没有下划线
'.
。这种简单的转换允许以非常简单的方式对复合密钥进行编码和解码。
var records = jQuery("#table-1").jqGrid('getGridParam', 'records');
var lastRowId = jQuery("#table-1").jqGrid('getDataIDs')[records - 1];

if (lastRowId == id)
{  
    jQuery('#table-1').addRowData(undefined, {}, 'last');
}