我正在使用 jqGrid 4.4.4V ,我有两个网格让我们说grid1和grid2, 当我从grid1向grid2添加多行时,行id更新如0,1,...但是当我添加单行时,每个id都从' 0' .So开始,如果我多次这样做,所有rowIds都会像' 0'只要。有没有办法让rowIds始终是唯一的。
注意:数据不是手动添加到网格,而是从sql获取。以下是两个网格的代码。
GRID1:
$("#grid1").jqGrid({
url: "/.......some handler path",
datatype: 'json',
contentType: "application/json; charset-utf-8",
mtype: 'Get',
colNames: ['Val ID', 'Val Name', 'Description', 'Dept', 'Vam', 'Venue', 'Venue', 'Solution', 'Method', 'Type'],
colModel: [
{ name: 'valId', index: 'valId', hidden: true },
{ name: 'valName', index: 'valName', formatter: Namefield, width: 400 },
{ name: 'description', index: 'description', width: 300 },
{ name: 'dep', index: 'dep', width: 300 },
{ name: 'vam', index: 'vam', width: 300 },
{ name: 'venueId', index: 'venueId', hidden: true },
{ name: 'venue', index: 'venue', width: 250 },
{ name: 'solution', index: 'solution', width: 400 },
{ name: 'Method', index: 'Method', width: 300 },
{ name: 'Type', index: 'Type', hidden: true },
],
pager: $('#pager'),
key:true,
rowNum: 10,
rowList: [10, 20, 30, 40],
height: '100%',
viewrecords: true,
caption: '',
sortname: 'Val Name',
sortorder: "desc",
emptyrecords: 'No records to display',
autowidth: true,
multiselect: true,
multiselectWidth: 50,
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
}
});

grid2:
$("#grid2").jqGrid({
datatype: 'function',
mtype: 'Post',
colNames: ['Val ID', 'Val Name', 'Description', 'Dept', 'Vam', 'Venue ID', 'Venue', 'Solution', 'Method', 'Type'],
colModel: [
{ name: 'valId', index: 'valId', hidden: true },
{ name: 'valName', index: 'valName', formatter: Namefield, width: 400 },
{ name: 'description', index: 'description', width: 300 },
{ name: 'dep', index: 'dep', width: 300 },
{ name: 'vam', index: 'vam', width: 300 },
{ name: 'venueId', index: 'venueId', hidden: true },
{ name: 'venue', index: 'venue', width: 250 },
{ name: 'solution', index: 'solution', width: 400 },
{ name: 'Method', index: 'Method', width: 300 },
{ name: 'Type', index: 'Type', hidden: true },
{ name: 'delete', index: 'delete', width: 50, formatter: Close, align: 'center' }
],
pager: $('#pager'),
key:true,
rowNum: 10,
rowList: [10, 20, 30, 40],
height: '100%',
viewrecords: true,
caption: '',
sortname: 'Val Name',
sortorder: "desc",
emptyrecords: 'No records to display',
autowidth: true,
multiselect: true,
multiselectWidth: 50,
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
}
});

我在下面使用add和del方法,
var selRowIdsArray = [];
var myGrid = $("#grid1");
var SelectedGrid = $('#grid2');
//get no of selected rows count
var selRowIds = $("#grid1").jqGrid('getGridParam', 'selarrrow');
if (selRowIds.length !== 0) {
if (selRowIdsArray.length == 0) {
selRowIdsArray.push.apply(selRowIdsArray, selRowIds);
}
for (i = 0; i < selRowIdsArray.length; i++) {
selRowIdsInt = selRowIdsArray[i];
var selRowId = myGrid.getRowData(selRowIdsInt);
SelectedGrid.jqGrid('addRowData', i, selRowId);
myGrid.jqGrid('delRowData', selRowIdsInt);
}
}
&#13;
感谢您的帮助。
答案 0 :(得分:0)
如果您很好地理解什么是rowid以及jqGrid的idPrefix
选项是什么,那么问题的解决方案可能非常简单。它是相应HTML id
的{{1}}元素的<tr>
属性值,用于显示数据。 jqGrid的内部实现是这样的,jqGrid 必须将<table>
分配给网格的每一行,这对应于数据。严格建议在每个项目中包含唯一的id
属性。它可以是来自数据库的本机id或某些复合键,如id
,它从后端保存有关本机ID的完整信息。我建议您从the picture检查the article。
您可以将ID设置为id1 + "_" + id2
之外的任何其他名称。如果您使用id
的{{1}}选项,并且repeatitems: false
是唯一ID的名称,那么您应该使用
jsonReader
告知jqGrid。与您一样,包含valId
与默认值的任何其他属性是不必要的。 jsonReader: { id: "valId" }
的任何其他属性(例如jsonReader
(而不是jsonReader
))将被忽略。之后,您可以从网格中删除不需要的隐藏列Id
,从而在网格的id
元素中保存相同的信息。
如果您使用网格编辑
,我建议再添加一个选项valId
该选项将<td>
属性重命名为prmNames: { id: "valId" }
,以便在编辑网格时发送。因此,您可以继续使用id
代替valId
。
接下来你应该明白rowid可能与id(valId
)不同。如果页面上有多个网格,则严格建议使用id
。甚至在你使用的jqGrid(4岁版本)的复古版本4.4.4上也支持它。例如,您可以在第一个网格中使用valId
,在第二个网格中使用idPrefix
。 阻止HTML页面上的id dupplicates ,因为rowid将使用相应的id前缀从id(idPrefix: "g1_"
)构建,两个网格都不同。
在理解了rowid的含义之后,应该清楚如何将所选行从一个网格移动到另一个网格。声明
idPrefix: "g2_"
为您提供所选行的rowid(第一个网格的valId
)和您使用的前缀var selRowIds = $("#grid1").jqGrid('getGridParam', 'selarrrow');
var idPrefix1 = $("#grid1").jqGrid('getGridParam', 'idPrefix');
。您可以使用idPrefix
去除前缀idPrefix1
以获取行数据,并使用$.jgrid.stripPref
将相同数据添加到第二个网格,使用相同的ID
getRowData
addRowData
会自动使用第二个网格的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);
}
。
最后,我建议你多久使用复古版4.4.4 dead 。我建议你使用free jqGrid的当前版本(4.13.6) - 这是我从2014年底开始开发的jqGrid的分支。如果因为使用了错误的NuGet而安装了4.4.4包jQuery.jqGrid,然后你应该卸载包并安装另一个包:free-jqGrid。