easyui-editing datagrid 批量保存数据 二

    接着上篇博客继续,我们的批量保存。

      

    当我们使用了updaterow来更新了datagrid中的数据时,怎么获取到数据,这里我们不能使用便捷的getchanges ,只能绕一个道了,我们选择一个万无一失的方法,就是通过easyui的getRows来拿到datagrid中所有的数据行。


  二、第二种———getRows


      解决方案就是拿到datagrid中所有的数据,json的形式传递。

    如何取得datagrid的行数:getRows, 转换成json :JSON.stringify("***");    

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;">//save all the dada from easyuiDatagrid
function updateDatagrid(num)
{
	var rows = $('#dg').datagrid('getRows');
	var entities = "";</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;">// 循环 datagrid 中现有的数据,并且逐行复制给Entities ,并且转换成json格式</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;">// 在后台反序列话成对象的对象集合。
	for(i = 0;i < rows.length;i++)
	{
	   entities = entities  + JSON.stringify(rows[i]);	
	}
	$.ajax({
             url: getRootPath()+'/labour/update.do',
             type: "post",
             async: true,
             dataType: 'json',
             data: {'entities': entities}
             success: function (data) {
            	 if(data.message=="操作成功!"){
						alert(data.message);
					}else{
						alert(data.message);
						return;
					}
                 $('#dg').datagrid('reload');
             }
           });
   
	}</span></span>

     后台的接收: 这里使用的解析json的工具是 net.sf.json。主要使用的是jsonarray 和jsonobject ,从字面上就可以看出:一个是负责数据/集合的,一个是负责单个对象的。这里我们要解析的是数组,所以使用的是jonsarray中的tocollection 方法,jsonarray还有很多其他方法,有兴趣的可以看看。

   具体的代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;">	import net.sf.json.JSONArray;
	import net.sf.json.JSONObject;<span>	</span></span><pre name="code" class="java"><span>	@Override</span></span>
@RequestMapping("update.do")
@ResponseBody
 
 
<span style="font-family:KaiTi_GB2312;font-size:18px;"></pre><pre name="code" class="java"></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"></pre><pre name="code" class="java"></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;"><span>	</span>public String update(HttpServletRequest request) {
		//1、 get the detail data
		String ens = request.getParameter("entities");
		
		// 2、format the string
		ens = ens.replace("}{", "},{");
		ens = "[" + ens.toString() + "]";</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;"><span>		</span>// 3. <span style="font-family: Arial, Helvetica, sans-serif;">transform to the object list</span>
		JSONArray array =JSONArray.fromObject(ens.toString());
		@SuppressWarnings("unchecked")
		List<JobContentDetail> listDetail=(List<JobContentDetail>)JSONArray.toCollection(array, JobContentDetail.class);
		try {
			labourservice.saveData(listDetail);
		} catch (Exception e) {
			e.printStackTrace();
			return createErrorMessage("操作失败!").toString();
		}
		return createSuccessMessage("操作成功!").toString();
	}</span></span>

     三、使用心得

     一边编辑,一边保存也好;先编辑,后批量保存也好,他们的解决方案都是一样的,因为easyui的datagrid (当然还有combobox)的接收数据类型是json ,所以,我们只要可以拿到前台显示的json数据,所有的东西就好解决了,从前台向后台传递,只要URL给对了,那么一切就顺利成章了。

你可能感兴趣的:(easyui)