在jqgrid中添加行后出现问题

我使用下面的代码在jqGrid中添加行

更新

我点击复选框,使用下面的代码查看id's

  $(document).delegate('#list1 .jqgrow td input', 'click', function () { /*var grid = $("#list1 .jqgrow"); var rowid = grid.jqGrid('getGridParam', 'selrow');*/ var mydata = $("#list1").jqGrid('getGridParam','data'); var idToDataIndex = $("#list1").jqGrid('getGridParam','_index'); var id; for (id in idToDataIndex) { if (idToDataIndex.hasOwnProperty(id)) { console.info(id+", "+mydata[idToDataIndex[id]]['cfgName']); } } console.info("maxid "+id); }); 

这是我在firebug中的输出

在此处输入图像描述

我怎么得到jqg1代替id? 可能这是在创造问题

 function addRow(cfgid,cfgname,hostname,cfgDesc,productId,cfgType,updateDate,emailAddress,absolutePath) { var myrow = {cfgid:cfgid, '':'', cfgName:cfgname, hostname:hostname, cfgDesc:cfgDesc, productId:productId,hostname:hostname,cfgType:cfgType,updateDate:updateDate,emailAddress:emailAddress,absolutePath:absolutePath}; $("#list1").addRowData(cfgid, myrow,"first"); $("#list1").trigger("reloadGrid"); $("#list1").sortGrid('updateDate', false, 'desc'); } 

updateRow工作正常,因为我使用currentrow但如何使用max id在addRow添加新行?

 function updateRow(cfgid,cfgname,hostname,cfgDesc,cfgType,updateDate,emailAddress,absolutePath) { $("#list1").delRowData( currentrow ); $("#list1").trigger("reloadGrid"); var myrow = {cfgid:cfgid, '':'', cfgName:cfgname, hostname:hostname, cfgDesc:cfgDesc, productId:updateproductid,hostname:hostname,cfgType:cfgType,updateDate:updateDate,emailAddress:emailAddress,absolutePath:absolutePath}; $("#list1").addRowData(currentrow , myrow); $("#list1").sortGrid('updateDate', false, 'desc'); $("#list1").trigger("reloadGrid"); } 

但似乎在添加行时它会获得重复的id因为当我尝试选择该行时,会选择2行。

我的完整jqGrid代码

  var xmlDoc = $.parseXML(xml); $('#configDiv').empty(); $('
') .attr('id','configDetailsGrid') .html('
'+ '
'+ '
') .appendTo('#configDiv'); var grid = jQuery("#list1"); grid.jqGrid({ datastr : xml, datatype: 'xmlstring', colNames:['cfgId','','Name', 'Host', 'Description','Product', 'Type', 'Last Updated Time','Last Updated By',''], colModel:[ {name:'cfgId',index:'cfgId', width:90, align:"right", hidden:true}, {name:'',index:'', width:15, align:"right",edittype:'checkbox',formatter: "checkbox",editoptions: { value:"True:False"},editable:true,formatoptions: {disabled : false}}, {name:'cfgName',index:'cfgName', width:90, align:"right"}, {name:'hostname',index:'hostname', width:90, align:"right"}, {name:'cfgDesc',index:'cfgDesc', width:90, align:"right"}, {name:'productId',index:'productId', width:60, align:"right"}, {name:'cfgType',index:'cfgType', width:60, align:"right"}, {name:'updateDate',index:'updateDate',sorttype:'Date', width:120, align:"right"}, {name:'emailAddress',index:'emailAddress', width:120, align:"right"}, {name:'absolutePath',index:'absolutePath', width:90, align:"right", hidden:true}, ], pager : '#gridpager', rowNum:10, scrollOffset:0, height: 'auto', autowidth:true, viewrecords: true, gridview: true, xmlReader: { root : "list", row: "com\\.abc\\.db\\.ConfigInfo", userdata: "userdata", repeatitems: false }, onSelectRow: function(id,status){ var rowData = jQuery(this).getRowData(id); configid = rowData['cfgId']; configname=rowData['cfgName']; configdesc=rowData['cfgDesc']; configenv=rowData['cfgType']; var ch = jQuery(this).find('#'+id+' input[type=checkbox]').attr('checked'); if(ch) { jQuery(this).find('#'+id+' input[type=checkbox]').attr('checked',false); } else { jQuery(this).find('#'+id+' input[type=checkbox]').attr('checked',true); } rowChecked=1; currentrow=id; }, onCellSelect: function(rowid, index, contents, event) { if(index==2) { $(xmlDoc).find('list com\\.abc\\.db\\.ConfigInfo').each(function() { //alert($(this).find('cfgId').text()+" "+configid); if($(this).find('cfgId').text()==configid) { configname=$(this).find('cfgName').text(); configdesc=$(this).find('cfgDesc').text(); configenv=$(this).find('cfgType').text(); filename=$(this).find('fileName').text(); updatedate=$(this).find('updateDate').text(); absolutepath=$(this).find('absolutePath').text(); productname=productMap[$(this).find('productId').text()]; } }); } } }); grid.jqGrid('navGrid','#gridpager',{edit:false,add:false,del:false});

我哪里错了?

您不能只使用相同的id="1"作为addRowDataaddRowData的第一个参数。 如果这样做,您将在页面上收到HTML页面上不允许的id重复项。

似乎cfgId列在网格中是唯一的。 因此,如果您的页面上只有一个带有cfgId列的网格, cfgId可以将addRowData中的addRowData修改为以下内容:

 $("#list1").addRowData(cfgid, myrow,"first"); 

另一种方法是使用$.jgrid.randId()方法作为addRowData的rowid参数

 $("#list1").addRowData($.jgrid.randId(), myrow,"first"); 

undefined值:

 $("#list1").addRowData(undefined, myrow,"first"); 

在最后一种情况下,jqGrid将在内部调用$.jgrid.randId()来生成唯一的rowid。