據介紹,jqgrid有3種編輯數據的方式:javascript
Form Editing很方便,直接把oper參數傳遞給Controller進行判斷是add仍是edit仍是del,而後相應處理便可。大體如:css
string operation = form["oper"]; if (operation.Equals("add")){...} else if (operation.Equals("edit")){...} else if (operation == "del"){...}
固然前端的配置要跟上:html
<script type="text/javascript"> $(function () { $("#grid").jqGrid({...}); $("#grid").jqGrid('navGrid', '#pager', { edit: true, add: true, del: true, search: true }, {...},//Edit {...},//Add {...},//Delete {...} //Search ); }); </script>
這樣會調用jqgrid內置的窗體來進行CRUD。若是不喜歡內置的對話框格式,咱們能夠自定義。本文介紹的就是自定義對話框的方法。前端
先看下效果圖java
這裏的建立新聯繫人對話框就是自定義的,步驟以下:ajax
一、html-設計本身的對話框json
<button onclick="addDialog()">添加聯繫人</button> <table id="grid"></table> <div id="pager"></div> <div id="myDialog"> <form id="myForm"> Name:<input type="text" id="Name" name="Name" /><br /> Email:<input type="text" id="Email" name="Email" /><br /> Created On:<input type="text" id="CreatedOn" name="CreatedOn" /> </form> </div>
二、javascript:數組
包含3部分ide
1 <script type="text/javascript"> 2 $(function () { 3 jQuery("#grid").jqGrid({ 4 url: "/Home/GetSortingData", 5 datatype: "json", 6 mtype: "get", 7 colModel: [ 8 { label: 'Number', name: 'No', index: 'No', width: 60, sorttype: "int" }, 9 { label: 'Name', name: 'Name', index: 'Name', width: 90 }, 10 { label: 'Email', name: 'Email', index: 'Email', width: 100, sortable: false }, 11 { 12 label: 'Created On', name: 'CreatedOn', index: 'CreatedOn', width: 150, 13 formatter: 'date', formatoptions: { srcformat: 'Y-m-d H:i:s', newformat: 'Y-m-d H:i:s' } 14 } 15 ], 16 caption: "jqGrid data", 17 loadonce: false, //排序翻頁等操做在服務端完成 18 rowNum: 5, 19 rowList: [5, 10, 20], //設置分頁下拉列表 20 pager: "#pager", 21 viewrecords: true, 22 width: 500, height: "auto", 23 jsonReader: { repeatitems: false }, //prmNames: { id: "No" }, 24 sortorder: "asc", 25 sortname: "No"//傳遞給服務端的排序字段名 26 }); 27 // 配置對話框(使用Jquery-UI的dialog插件) 28 $("#myDialog").dialog({ 29 autoOpen: false, 30 modal: false, // 設置對話框爲非模態對話框 31 resizable: true, 32 width: 250, 33 buttons: { // 爲對話框添加按鈕 34 "取消": function () { $(this).dialog("close") }, 35 "建立": add 36 } 37 }); 38 }); 39 //添加-對話框 40 var addDialog = function () { 41 var dlg = $("#myDialog"); 42 var btnPane = dlg.siblings(".ui-dialog-buttonpane"); //註釋1 43 dlg.find("input").removeAttr("disabled").val(""); 44 btnPane.find("button:not(:contains('取消'))").hide(); //註釋2 45 btnPane.find("button:contains('建立')").show(); 46 dlg.dialog("option", "title", "建立新聯繫人").dialog("open"); 47 }; 48 //添加-函數表達式 49 var add = function () { 50 var dlg = $("#myDialog"); 51 var name = $.trim(dlg.find("#Name").val()); 52 var email = $.trim(dlg.find("#Email").val()); 53 var createdOn = $.trim(dlg.find("#CreatedOn").val()); 54 55 var actionUrl = "/Home/OperateData"; 56 var params = { 57 "Name": name, 58 "Email": email, 59 "CreatedOn": createdOn 60 }; 61 62 $.ajax({ 63 url: actionUrl, 64 type: "post", //默認爲get 65 data: params, //傳遞給服務端的數據 66 dataType: "json", 67 cache: false, 68 error: function (textStatus, errorThrown) { 69 alert("系統ajax交互錯誤: " + textStatus); 70 }, 71 success: function (data, textStatus) { 72 if (data.success == true) {//註釋3 73 var dataRow = { //註釋4 74 No: data.No, 75 Name: name, 76 Email: email, 77 CreatedOn: createdOn 78 }; 79 var selectedId = $("#grid").jqGrid("getGridParam", "selrow"); 80 81 if (selectedId) { 82 $("#grid").jqGrid("addRowData", data.No, dataRow, "before", selectedId);//若是有選定行則添加在選定行前面 83 } else { 84 $("#grid").jqGrid("addRowData", data.No, dataRow, "first");//沒有選定行則添加在第一行 85 } 86 dlg.dialog("close"); 87 alert("聯繫人添加操做成功!"); 88 } else { 89 alert("添加操做失敗!"); 90 } 91 } 92 }); 93 }; 94 </script>
以上代碼有4個註釋函數
註釋1:
var btnPane = dlg.siblings(".ui-dialog-buttonpane");
咱們知道siblings() 是得到匹配集合中每一個元素的同胞,那麼".ui-dialog-buttonpane"是個什麼類?
因而可知,經過咱們自定義的myDialog找到了咱們添加的2個按鈕所在的面板,這個面板就包含一個.ui-dialog-buttonpane的css類。找到這個類主要就是便於操做咱們設計的用於增刪改查的按鈕。
註釋2:
btnPane.find("button:not(:contains('取消'))").hide(); //註釋2
:contains 選擇器選取包含指定字符串的元素,該字符串能夠是直接包含在元素中的文本,或者被包含於子元素中。
在按鈕面板中查找不包含"取消"的元素,找到後把他們隱藏起來(這個對話框中後面還要添加其餘按鈕,根據增刪改查的須要來顯示和隱藏。如今可忽略。)
註釋3:
if (data.success == true) {//註釋3
success是什麼?哪裏來的?
在回調函數中,有一句success: function (data, textStatus) ,這裏的data是響應服務端的數據,這個data包含了從服務端傳來的信息。這個信息是從Controller傳來的,完整代碼見Controller部分,這裏只看這個data的部分:
return Json(new { success = true, msg = "hahah" , No=member.No //返回給前端序號 });
這個json對象就傳遞給了前端,success = true就是這麼來的。
註釋4:
var dataRow = { //註釋4 No: data.No, Name: name, Email: email, CreatedOn: createdOn };
這是一個數組,包含了自定義對話框中的各個文本框的值,經過jqgrid的addRowData方法,在客戶端操做jqgrid。
$("#grid").jqGrid("addRowData", data.No, dataRow, "first");
public ActionResult CRUD() { return View(); } public ActionResult OperateData(Member m) { Member member = new Member(); member.No = m.No; member.Name = m.Name; member.Email = m.Email; member.CreatedOn = m.CreatedOn; MyContext db = new MyContext(); db.Members.Add(member); db.SaveChanges(); return Json(new { success = true, msg = "hahah" , No=member.No //返回給前端序號 }); }
--End--