jqgrid 动态 添加行

将jqgrid动态添加行,进行了优化,贴出两个主要的方法
addRow:function(){
    //获取表格的初始话model
    var colModel = $("#xxList").jqGrid().getGridParam("colModel") ;
    var cellLenth = colModel.length ;
    //设置所有列可编辑(如果行数据添加后,只有默认的几列是可修改的,这样做吧)
    for ( var i = 0; i < cellLenth; i++) {
	colModel[i].editable = true ;
    }

    var newRow = JSON.stringify(colModel);
    var ids = $("#unitList").jqGrid('getDataIDs');
    //如果jqgrid中没有数据 定义行号为1 ,否则取当前最大行号+1
    var rowid = (ids.length ==0 ? 1: Math.max.apply(Math,ids)+1);
    //获得新添加行的行号(为什么是负数呢,与编辑行差别对待)
    var newrowid = (0-rowid);
    //设置grid单元格不可编辑 (防止在添加时,用户修改其他非添加行的数据)
    $("#xxList").setGridParam({cellEdit:false});
    //将新行追加到表格头部
    $("#xxList").jqGrid("addRowData", newrowid,newRow , "first");
    //设置grid单元格可编辑(防止追加行后,可编辑列无法编辑)
    $('#xxList').jqGrid('editRow', newrowid, false);
},
saveRow:function(rowid){
    var ids = $("#xxList").jqGrid('getDataIDs');
    //获取最小编号(不一定是需要编辑的行,放心吧,不会提交的,jqgrid会在提交前查看当前行是否是编辑状态)
    var rowid = Math.min.apply(Math,ids);
		
    $("#xxList").jqGrid('saveRow',rowid, { 
	successfunc: function( response ) {
	     //设置grid单元格可编辑
	     $("#xxList").setGridParam({cellEdit:true});
	     //方式jqgrid 认为操作失败,进入errorfunc(这个让人很蛋疼啊,进入了success,竟然不知道是成功了,还要return标识)
	     return true ;
	},errorfunc:function(){
	     alert("报错la");
	},url:"<c:url value='/xxxx/xx/save'/>"
    });
}


     addRow 和 saveRow 使用方法很简单,可以绑定到两个按钮上既可。

     对于多页面,多个表格的动态添加,可以将addRow 做个简单的优化,并提取成为公用方法,改为 addRow($jqGrid);saveRow($jqGrid) ,saveRow 中可以通过
$jqGrid.get("tr[editable=1]").attr("id") 获得编辑行编号,当然要特殊处理一下。
    
      推荐一个jqgrid学习网址:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing
      这里有相关jqgrid的一个扼要说明,和简单的实例代码,可帮助大家对jqgrid很好的学习、应用。






你可能感兴趣的:(jqGrid,jqgrid添加行,jqgrid动态添加行)