【问题标题】:problem after adding row in jqgrid在jqgrid中添加行后的问题
【发布时间】:2011-06-24 10:09:58
【问题描述】:

我正在使用下面的代码在 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();
            $('<div width="100%">')
            .attr('id','configDetailsGrid')
            .html('<table id="list1" width="100%"></table>'+
                    '<div id="gridpager"></div>'+
                '</div>')       
            .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});

我哪里错了?

【问题讨论】:

  • @Oleg: 你能看到这个问题吗
  • 如果您想给我发消息,您应该在我以前的一个答案中写下带有“@Oleg”的评论。如果您只是在您的新问题上写了相同的评论,而我没有写任何答案或我在stackoverflow 之前的评论将忽略该消息,我将不会收到任何通知。

标签: jquery jqgrid


【解决方案1】:

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

似乎cfgId 列在网格中是唯一的。因此,如果您的页面上只有一个带有cfgId 列的网格,您可以将addRow 中的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。

【讨论】:

  • 我用快照更新了我的问题,以表明我没有得到id,而是得到了一些垃圾值
  • @Ricky:我不明白你用来制作屏幕短片的代码。结果显示,对于 cfgName 中具有 abcd 的行,您拥有 cfgid=undefined。在这种情况下,rowid 将由$.jgrid.randId() 生成。它是一个带有 jqg 前缀的整数(在您的情况下为 1)。因此,您应该验证您的 cfgid 值。如果您不确定cfgid 不是唯一的,您可以在所有addRowData 调用中直接使用undefined
  • 感谢错误地总是调用 updateRow,所以我的 addRow 没有被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多