2012-08-07 77 views
0

在內聯模式中,我添加一個新行,編輯新值,然後單擊「保存」按鈕到服務器和本地。但是,當我繼續單擊'編輯'按鈕來編輯新行而不是編輯行時,它會添加一個新行。例如,首先添加一個新行:{ aa,bb,cc},然後通過單擊'編輯'按鈕並對其進行編輯將其更改爲{ aaaa,bb,cc},但jqGrid將oper=add發送到服務器,這會導致添加新行。我不明白爲什麼?爲什麼內聯編輯添加新行?

代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>ddddd</title> 
<link 
href="/education2/jqGrid4.4/themes/redmond/jquery-ui-1.8.2.custom.css" 
rel="Stylesheet" /> 
<link href="/education2/jqGrid4.4/themes/ui.jqgrid.css" rel="Stylesheet" /> 
<script src="/education2/jqGrid4.4/js/jquery-1.7.2.js" 
type="text/javascript"></script> 
<script type="text/javascript" 
src="/education2/jqGrid4.4/js/jquery-ui-1.8.2.custom.min.js"></script> 
<script type="text/javascript" 
src="/education2/jqGrid4.4/js/i18n/grid.locale-cn.js"></script> 

<script src="/education2/jqGrid4.4/js/jquery.jqGrid.src.js" 
type="text/javascript"></script> 

<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery("#gridTable").jqGrid({ 
     url : '/education2/json/searchStudent', 
     mtype : "POST", 
     datatype : "json", 
     colNames : [ 'studentId','studentNo', 'name', 'class'], 
     colModel : [ { 
      name : 'studentId', 
      index : 'studentId', 
      width : 55, 
      hidden : true, 
      hidedlg : true 
      key : true, 
      editable : true 
     }, { 
      name : 'studentNo', 
      index : 'studentNo', 
      width : 150, 
      editable : true   
     }, { 
      name : 'studentName', 
      index : 'studentName', 
      width : 150, 
      align : "right", 
      editable : true 
     }, { 
      name : 'className', 
      index : 'className', 
      width : 150, 
      align : "right", 
      editable : true, 
      edittype : 'select', 
      editoptions : { 
       dataUrl : "/education2/json/classNameStudent" 
      } 
     }], 
     jsonReader : { 
      root : "gridModel", 
      records : "record", 
      repeatitems : false 
     }, 
     prmNames : { 
      search : "search", 
      id : "id" 
     }, 
     rowNum : 10, 
     rowList : [ 10, 20, 30 ], 
     height : 400, 
     //   multiselect : true, 
     //   multiboxonly : true, 
     pager : jQuery('#gridPager'), 
     sortname : 'studentId', 
     viewrecords : true, 
     altRows : true, 
     sortorder : "desc", 
     editurl : "/education2/json/editStudent", 
     caption : "student" 
    }); 

    jQuery("#gridTable").jqGrid('navGrid', "#gridPager", { 
     edit : false, 
     add : false, 
     del : true 
    }, {}, {}, {}, { 
     caption : "find", 
     Find : "find", 
     closeAfterSearch : true 
    }); 

    jQuery("#gridTable").jqGrid('inlineNav', "#gridPager", { 

     editParams : { 
      successfunc : succesfunc1, 
      restoreAfterError : false 
     } 
    }); 
}); 

var succesfunc1 = function(response) { 
    var result = eval('(' + response.responseText + ')'); 
    if (result.success == true) { 
     alert("success!"); 
     return true; 
    } else { 
     alert(result.message); 
     return false; 
    } 
}; 


}; 
</script> 
</head> 
<body> 

<table id="gridTable"></table> 
<div id="gridPager"></div> 
<br /> 

</body> 
</html> 

UPDATE

我用$('#'+$.jgrid.jpID(rowid).attr('id', result1.new_id)刷新新行的行ID(想法來自@oleg問題「如何更新後列中內嵌的jqGrid添加「),並在服務器上使用oper=new && id !="new_row"來決定是編輯還是添加新行。它運行良好,但我必須添加一個aftersavefunc方法。

上面的問題我不太瞭解。我所做的只是繞過這個問題。

我的問題是,我:添加一個新行然後改變它,jqgrid不會改變它,jqgrid發送一個"oper=add"到服務器,這意味着服務器將添加一個新的行。

的另一個問題是:

jQuery("#gridTable").jqGrid('inlineNav', "#gridPager", { 

    addParams : { 
     addRowParams : { 
      keys : true, 
      url : '/education2/json/editStudent1?inlinePoer=add' 
     } 
    }, 
    editParams : { 
     url : '/education2/json/editStudent?inlinePoer=edit', 
    } 
}); 

不像我期望的那樣,每當我點擊添加,編輯或內嵌導航器中的保存按鈕,只有網址:'/education2/json/editStudent?inlinePoer=edit'被激發。看來url:'/education2/json/editStudent1?inlinePoer=add'不能被解僱,爲什麼?有人能幫助我嗎?

我用螢火蟲和IE。

+0

您是否在編輯行鍵(StudentId)的列? – 2012-08-07 12:59:32

+0

是的,我編輯並將數據保存到服務器 – llpllpllp 2012-08-07 17:55:47

+0

因此,如果您編輯您的密鑰,您正在創建一個新的記錄。如果您不在網格列上聲明密鑰,它將使用自動生成的rownumbers作爲可以解決您的問題的密鑰。 – 2012-08-07 17:57:00

回答

0

我想你錯過了什麼是給編輯:真正的在下面一行

jQuery("#gridTable").jqGrid('inlineNav', "#gridPager", { 

     editParams : { 
      successfunc : succesfunc1, 
      restoreAfterError : false 
     } 
    }); 

檢查此鏈接

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#inlinenav,並期待在這裏的參數。我不確定它只是試圖給予編輯爲真,如果它工作正常,很好......否則當我完成我的辦公室工作時,我會查看你的代碼。

+0

感謝您的幫助,但添加編輯:true是無用的。 我發現添加的行的ID是「new_row」,但我認爲它將是一個int值int studentId, 來自服務器的數據是{「id」:「28」,「message」:「success !「,」new_id「:28,」success「:true},也許這個返回值不是jqgrid的標準返回值?有人能幫助我嗎?謝謝 ! – llpllpllp 2012-08-07 16:12:29

+0

以及我可以向你保證,這jqgrid行和學生ID行號將永遠不會是一樣的。 – 2012-08-07 16:14:50

+0

和jqgrid網站只給我們應該發送到服務器,但我無法找出什麼數據應該從服務器返回。我在哪裏可以找到關於什麼數據應該從服務器返回關於jqgrid的文檔?謝謝 ! – llpllpllp 2012-08-07 16:17:59