Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQGrid addRowData rowId始终为零_Javascript_Jquery_Jqgrid - Fatal编程技术网

Javascript JQGrid addRowData rowId始终为零

Javascript JQGrid addRowData rowId始终为零,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我正在使用jqGrid 4.4.4V,我有两个网格,比如grid1和grid2, 当我从grid1向grid2添加多行时,行id的更新类似于0,1,…但当我添加单行时,每个行id都从“0”开始。因此,如果我多次这样做,所有行id将仅类似于“0”。有没有办法使rowid始终是唯一的 注意:数据不是手动添加到网格,而是从sql获取的。下面是两个网格的代码 grid1: $(“#grid1”).jqGrid({ url:“/……某些处理程序路径”, 数据类型:“json”, contentType:

我正在使用jqGrid 4.4.4V,我有两个网格,比如grid1和grid2, 当我从grid1向grid2添加多行时,行id的更新类似于0,1,…但当我添加单行时,每个行id都从“0”开始。因此,如果我多次这样做,所有行id将仅类似于“0”。有没有办法使rowid始终是唯一的

注意:数据不是手动添加到网格,而是从sql获取的。下面是两个网格的代码

grid1:

$(“#grid1”).jqGrid({
url:“/……某些处理程序路径”,
数据类型:“json”,
contentType:“application/json;charset-utf-8”,
mtype:'获取',
colNames:[“Val ID”、“Val名称”、“说明”、“部门”、“Vam”、“场馆”、“场馆”、“解决方案”、“方法”、“类型”],
colModel:[
{name:'valId',index:'valId',hidden:true},
{name:'valName',index:'valName',格式化程序:Namefield,宽度:400},
{name:'description',index:'description',宽度:300},
{名称:'dep',索引:'dep',宽度:300},
{名称:'vam',索引:'vam',宽度:300},
{name:'venueId',index:'venueId',hidden:true},
{名称:“场馆”,索引:“场馆”,宽度:250},
{name:'solution',index:'solution',宽度:400},
{name:'Method',index:'Method',宽度:300},
{name:'Type',index:'Type',hidden:true},
],
寻呼机:$(“#寻呼机”),
关键:没错,
rowNum:10,
行列表:[10,20,30,40],
高度:“100%”,
viewrecords:是的,
标题:'',
sortname:“Val Name”,
巫师:“描述”,
emptyrecords:'没有要显示的记录',
自动宽度:正确,
多选:对,
宽度:50,
jsonReader:{
根:“行”,
第页:“第页”,
总计:“总计”,
记录:“记录”,
重复项:false,
Id:“0”
}

});
如果您很好地理解jqGrid的rowid和do
idPrefix
选项,您的问题的解决可能会非常简单。它是显示数据的相应HTML
元素的
id
属性的值。jqGrid的内部实现是这样的,jqGrid必须
id
分配给网格中与数据对应的每一行。严格建议在每个项目中包含唯一的
id
属性。它可以是来自数据库的本机id,也可以是一些复合键,如
id1+“”+id2
,它们保存来自后端的本机id的完整信息。我建议你去检查一下

您可以将id放在任何其他名称下,如
id
。如果使用
jsonReader
repeatitems:false
选项,并且
valId
是唯一id的名称,则应使用

jsonReader: { id: "valId" }
通知jqGrid。不需要像您那样使用默认值包含
jsonReader
的任何其他属性。
jsonReader
的任何其他属性,如
Id
(而不是
Id
),都将被忽略。之后,您可以从网格中删除不需要的隐藏列
valId
,这将在网格的
元素中保存相同的信息

如果使用网格编辑,我建议再添加一个选项

prmNames: { id: "valId" }
该选项将编辑网格时发送的
id
属性重命名为
valId
。因此,您可以继续使用
valId
而不是
id

接下来,您应该了解rowid可以不同于id(
valId
)。如果页面上有多个as-one网格,则严格建议使用
idPrefix
。甚至在您使用的jqGrid的4.4.4版本(4年前的版本)上也支持它。例如,您可以在第一个网格中使用
idPrefix:“g1_”
,在第二个网格中使用
idPrefix:“g2_”
。它防止id在HTML页面上重复,因为rowid将根据id(
有效
)生成,并带有相应的id前缀,这两个网格不同

理解rowid的含义后,应该清楚如何将选定的行从一个网格移动到另一个网格。声明

var selRowIds = $("#grid1").jqGrid('getGridParam', 'selarrrow');
var idPrefix1 = $("#grid1").jqGrid('getGridParam', 'idPrefix');
为您提供所选行的行ID(第一个网格的
idPrefix
)和您使用的前缀
idPrefix1
。您可以使用
$.jgrid.stripPref
去除前缀,
getRowData
获取行数据,并使用
addRowData
使用相同的id将相同的数据添加到第二个网格中

var i, id, item;
for (i = 0; i < selRowIds.length; i++) {
    id = $.jgrid.stripPref(idPrefix1, selRowIds[i]);
    item = myGrid.jqGrid("getRowData", id);
    SelectedGrid.jqGrid("addRowData", id, item);
}
vari,id,item;
对于(i=0;i
addRowData
将自动使用第二个网格的
idPrefix


最后,我建议您停止使用4.4.4版的复古版本,因为多年来它已经过时了。我建议您使用jqGrid的最新版本(4.13.6),这是我从2014年底开始开发的jqGrid的分支。如果您安装4.4.4是因为使用了错误的NuGet软件包,那么您应该卸载该软件包并安装另一个:。

感谢您的明确解释,我已经从中获得了一些知识。但我收到一个错误:*“无法读取min.js文件中未定义的“**的属性“0”,已彻底检查但未找到原因,认为这可能导致不支持问题,网格已加载标题b。”