<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
jqGrid 範例中文版網址:http://blog.mn886.net/jqGrid/
國外官網:http://www.trirand.com/blog/jqgrid/jqgrid.html
http://www.guriddo.net/demo/guriddojs/
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs
http://www.guriddo.net/documentation/guriddo/javascript/
jqGrid是Trirand軟體開發公司的Tony Tomov開發的一個方便人們開發使用的web元件,它包含了許多免費和開源的庫如:jQuery, ThemeRoller, & jQuery UI等 ,同時最新的版本已經支援bootstrapUI,Tony最初的時候是因為他需要一種方式來表示資料庫資訊,這種方式有速度上的要求同時還要獨立於伺服器端技術和後臺資料庫,於是jqGrid誕生了,從最初的版本到現在已經升級到了Guriddo jqGrid 5.4 ,之前的各個版本都是在不斷的修復bug以及新增符合需求的新功能。jqGrid越來越趨於完善。
jqGrid 是一個用來顯示網格資料的jQuery外掛,通過使用jqGrid可以輕鬆實現前端頁面與後臺資料的ajax非同步通訊。
$("#tableOEE").jqGrid({ data: [], datatype: "json", rownumbers: true, //顯示行號 loadonce:true,//在載入完成後,datatype自動變成local autowidth: true, pager: "#pager", viewrecords: true,//是否顯示總記錄數 rowNum: 300,//表格中顯示的記錄數 rowList: [10, 20, 30], height: '100%', gridview: true,//整個表格都構造完成後再新增到grid中。 jsonReader:{repeatitems:false,id:"2"},//2表示id為rowData的第三個元素。 beforeProcessing:function(res,status,errror){ $.each(res.rows,function(i,n){//在來自Sever的資料Grid處理之前,格式化返回的JSON資料 n.time=Number(n.time).toExponential(3); n.shift=["早","中","晚"][n.shift]; }); }, loadComplete:function(xhr){//Grid載入完成後,可對Grid中的元素繫結事件了。分組完成。 $("td.tdQty").bind("click", {}, getDcData); var rowCount=$(this).getGridParam("records"); }, colModel: [{ name: 'line', index: 'line', width: 80, align: 'center', label: '產線', key:true,editable:true },//排序sidx { name: 'shift', index: 'shift', width: 80, align: 'center', label: '班次' }, { name: 'remark_avai', index: 'remark_avai', label: '備註', hidden: true }, { name: 'qty_dot', index: 'qty_dot', align: 'right', classes: 'linkbyPop tdQty', label: '總點數', formatter: NumFmatter }, //formatter 格式化欄位,unformat:反格式化。 ] }); jQuery("#tableOEE").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false, search: true, refresh: true }, {}, //編輯edit引數 {}, //新增add引數 {}, //刪除del引數 { multipleSearch: true },//搜尋search引數 {closOnEscape:true}//檢視view引數 ); jQuery("#tableOEE").jqGrid('setGroupHeaders', {//表頭分組 useColSpanStyle: true, groupHeaders: [ { startColumnName: 'time_avai', numberOfColumns: 1, titleText: '<em>A</em>' }, { startColumnName: 'qty_dot', numberOfColumns: 3, titleText: '<em>F</em>' }] });
$("#tableOEE").jqGrid("clearGridData", true); $("#tableOEE").jqGrid("setGridParam", { data: {...} }); //或者 $("#tableOEE").setGridParam({ datatype: "json",url: "ajax/Punch.ashx",postData:"line=aa&lot=''"}); $("#tableOEE").trigger("reloadGrid");
var GridJson=new { total="10",page="1",rows=oeeList,records=oeeList.Count.ToString()}; returnStr=new JavascriptSerialzer().Serilize(gridJson);
1、當repeatitems:false時,名稱要與colModel中的名字一致 。
{"total":"10","page":"1","rows"=[{"line":"A1","Shift":3,"qty":123,"time":0.02}],"records":"4"} //records為查詢出的總記錄數,並非本頁記錄數。
2、如果repeatitems:true(預設)
{"total":"10","page":"1","rows":[{id:"1",cell:["cell1","cell2"]},{id:"2",cell:["cell3","cell4"]}],"records":"4"}
對數位進行千分符分割:
function getNumberSpliter(num) { if (num != '' && !isNaN(num)) { re = /(d{1,3})(?=(d{3})+(?:$|.))/g; n = String(num).replace(re, "$1,"); return n; } else return num; }
$("#tableOEE").jqGrid({ data: [], datatype: "local", ... }); //獲得伺服器資料 $.ajax({ type: "GET", cache: false, url: "ajax/Punch.ashx", data: i, success: function (res) { if (res.indexOf("SERVER_ERROR") == -1) { res = $.parseJSON(res); $.each(res, function (i, n) { this.shift = Shift[this.shift]; this.time_perdot = Number(this.time_perdot).toExponential(3); }); $("#tableOEE").jqGrid("clearGridData", true); $("#tableOEE").jqGrid("setGridParam", { data: res }); $("#tableOEE").trigger("reloadGrid"); $("td.tdQty").bind("click", {}, getDcData);//繫結grid中元素事件 } else { alert(res.replace("SERVER_ERROR", "錯誤")); } $.unblockUI(); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus + errorThrown); } });
$("#tableOEE").jqGrid({ grouping: true, groupingView: { groupField: ['BoxId'] },//分組 multiselect: true, autowidth: true, //... colModel: [ { name: 'Serial', index: 'Serial', align: 'center', label: '序列號' }, { name: 'BoxId', index: 'BoxId', align: 'center', label: '箱號' }, { name: 'progress_recid', key: true, index: 'progress_recid', width: 80, align: 'center', label: '內部號' }/ //key: true主鍵,伺服器返回的資料沒有ID時,將此作為rowid使用。 ], onSelectRow: selectRow }); var parentWidth = $("#DIV_Body").css("width").replace("px", ""); $("#tableOEE").jqGrid("setGridWidth", parentWidth); function selectRow(rowid, status, e) { if (status) { if ($("#tableOEE").getRowData(rowid).PalLocation != "在貨倉") { $("#tableOEE").setSelection(rowid, false);//取消選擇 alert("在貨倉狀態的卡板,只能由SIS人員操作"); } var selRows = $("#tableOEE").getGridParam('selarrrow');//'selrow'最後選擇行的主鍵 if (selRows.length > 2) { $("#tableOEE").setSelection(rowid, false); alert("只能選擇兩個序列號更換"); } } }
ajax遠端請求分頁,排序,手工構建搜尋引數,進行伺服器端查詢,以及CURD操作。
$(function () { $("#grid").jqGrid({ url: "/PushPDA/GetTodoLists", datatype: 'json', mtype: 'Get', colNames: ['操作', 'ID', 'IP', '所屬人', '生產線', '狀態', '型別', '更新日期', '更新時間'], colModel: [ { name: 'act', index: 'act', align: 'center', width: 80, search: false, sortable: false, editable: false }, { hidden: true, align: 'center', name: 'ID', index: 'ID', editable: true, key: true }, { name: 'IP', align: 'center', index: 'IP', editable: true }, { name: 'Owner', align: 'center', index: 'Owner', editable: true }, { name: 'Line', align: 'center', index: 'Line', editable: true }, { name: 'Status', align: 'center', index: 'Status', editable: true, }, { name: 'Type', align: 'center', index: 'Type', editable: true, edittype: 'select', formatter: 'select', editoptions: { value: { 'CASE': '套料', 'BIG': '中大件料' } } }, { name: 'UpdateDate', align: 'center', index: 'UpdateDate', editable: false }, { name: 'UpdateTime', align: 'center', index: 'UpdateTime', editable: false } ], pager: jQuery('#pager'), rowNum: 100, rowList: [10, 20, 30, 40], height: '100%', viewrecords: true, emptyrecords: 'No records to display', jsonReader: { root: "rows", page: "page", total: "total", records: "records", repeatitems: false, Id: "0" }, autowidth: true, multiselect: false, beforeProcessing: function (res) {//格式化返回資料 if (!res) return; //$.each(res.rows, function (i, n) { // n.UpdateDate = DatefromJSON(n.UpdateDate); // n.UpdateTime = secondToTimeString(n.UpdateTime); //}); }, gridComplete: function () { var ids = $("#grid").getDataIDs();//jqGrid('getDataIDs'); for (var i = 0; i < ids.length; i++) { var cl = ids[i]; be = "<input style='height:22px;width:40px;' type='button' value='編輯' onclick="jQuery('#grid').jqGrid('editGridRow','" + cl + "',{url: '/PushPDA/Edit',checkOnSubmit:true,checkOnUpdate:true,closeAfterEdit:true,closeOnEscape:true});" />"; de = "<input style='height:22px;width:40px;' type='button' value='刪除' onclick="jQuery('#grid').jqGrid('delGridRow','" + cl + "',{ url: '/PushPDA/Delete', closeOnEscape:true});" />"; jQuery("#grid").jqGrid('setRowData', ids[i], { act: be + de }); } }, }).navGrid('#pager', { edit: true, add: true, del: true, search: false, refresh: true }, { // edit options zIndex: 100, url: '/PushPDA/Edit', closeOnEscape: true, closeAfterEdit: true, recreateForm: true, afterComplete: function (response) { if (response.responseText) { alert(response.responseText); } } }, { // add options zIndex: 100, url: "/PushPDA/Create", closeOnEscape: true, closeAfterAdd: true, afterComplete: function (response) { if (response.responseText) { alert(response.responseText); } } }, { // delete options zIndex: 100, url: "/PushPDA/Delete", closeOnEscape: true, closeAfterDelete: true, recreateForm: true, msg: "Are you sure you want to delete this task?", afterComplete: function (response) { if (response.responseText) { alert(response.responseText); } } }); new_search(); }); //將整數秒格式轉成時間格式。 function secondToTimeString(seconds) { if (seconds == null) return ""; var hh = parseInt(seconds / 3600).toString(); seconds -= hh * 3600; var mm = Math.round(seconds / 60).toString(); if (hh.length == 1) { hh = "0" + hh; } if (mm.length == 1) { mm = "0" + mm; } return hh + ":" + mm; } //解析JOSN返回的日期字串格式。 function DatefromJSON(jsonstr) { // return eval (jsonstr.replace(new RegExp('/Date\((-?[0-9]+)\)/','g'),'new Date($1)')).toLocalDateString(); if (jsonstr == null) return ""; d = eval('new ' + (jsonstr.replace(///g, ''))); var month = (d.getMonth() + 1); month = ("00" + month).substr(("" + month).length); var day = d.getDate() day = ("00" + day).substr(("" + day).length); return d.getFullYear() + "-" + month + "-" + day; }
主要構建的查詢引數為searchField,searchString,searchOper
var searchPara = { // 構建查詢需要的引數 searchField: "Line", searchString: strLines, searchOper: "in" }; // 獲得當前postData選項的值 var postData = $("#grid").jqGrid("getGridParam", "postData"); // 將查詢引數融入postData選項物件 $.extend(postData, searchPara); $("#grid").jqGrid("setGridParam", { url: "/PushPDA/GetTodoLists", search: true //將jqGrid的search選項設為true }).trigger("reloadGrid", [{ page: 1 }]); // 重新載入Grid表格,以使上述設定生效
主要構建的查詢引數為groupOp,rules,filed,op,data.
var rules = ""; // 構建查詢需要的引數 var searchField = "Line"; var searchString = strLines; var searchOper = "in"; if (searchField && searchOper && searchString) { //如果三者皆有值且長度大於0,則將查詢條件加入rules字串 rules += ',{"field":"' + searchField + '","op":"' + searchOper + '","data":"' + searchString + '"}'; } if (strDate1) { rules += ',{"field":" IP","op":"eq","data":"' + strDate1 + '"}'; } if (rules) { //如果rules不為空,且長度大於0,則去掉開頭的逗號 rules = rules.substring(1); } //串聯好filtersStr字串 var filtersStr = '{"groupOp":"AND","rules":[' + rules + ']}'; // 獲得當前postData選項的值 var postData = $("#grid").jqGrid("getGridParam", "postData"); // 將查詢引數融入postData選項物件 $.extend(postData, { filters: filtersStr }); $("#grid").jqGrid("setGridParam", { url: "/PushPDA/GetTodoLists", search: true // 將jqGrid的search選項設為true }).trigger("reloadGrid", [{ page: 1 }]); // (7)重新載入Grid表格,以使上述設定生效
注意使用Linq語句,以及動態Linq查詢。
public JsonResult GetTodoLists(string sidx, string sord, int page, int rows, bool _search, string searchField, string searchString, string searchOper, string filters) //Gets the todo Lists. { IQueryable<PushPdaInfo> pdas = db.PushPDAs; IQueryable<PushPdaInfo> todoListsResults = null; //搜尋 if (_search) { if (!string.IsNullOrEmpty(searchField))//單欄位搜尋 { todoListsResults = pdas.Where(p => searchString.IndexOf(p.Line) > -1); } else if (!string.IsNullOrEmpty(filters))//多欄位搜尋 { JObject ofilters = JObject.Parse(filters); string searchField1; string searchString1; string sql; for (int i = 0; i < ofilters["rules"].Count(); i++) { searchField1 = ofilters["rules"][i]["field"].ToString(); searchString1 = ofilters["rules"][i]["data"].ToString(); sql = """ + searchString1 + "".Contains(" + searchField1 + ")"; todoListsResults = pdas.Where(sql); } } } else { return Json(new { }, JsonRequestBehavior.AllowGet); } //排序 if (string.IsNullOrEmpty(sidx)) sidx = "IP"; todoListsResults = todoListsResults.OrderBy(sidx + " " + sord); //分頁 int pageIndex = Convert.ToInt32(page) - 1; int pageSize = rows; int totalRecords = pdas.Count(); var totalPages = (int)Math.Ceiling((float)totalRecords / (float)rows); todoListsResults = todoListsResults.Skip(pageIndex * pageSize).Take(pageSize); var todoListsResults1 = from p in todoListsResults.ToList() select new { p.ID, p.IP, p.Owner, p.Line, p.Status, p.Type, UpdateDate = p.UpdateDate.HasValue ? p.UpdateDate.GetValueOrDefault().ToShortDateString() : "", UpdateTime = p.UpdateTime.HasValue ? IntTimeToStringTime(p.UpdateTime.GetValueOrDefault()) : "" }; var jsonData = new { total = totalPages, page, records = totalRecords, rows = todoListsResults1 }; return Json(jsonData, JsonRequestBehavior.AllowGet); }
<div id="search_container" title="Search Options"> <div id="boxbody"> <fieldset> <legend>Query IP<span id="spanClearDates">[Clear]</span></legend> <table> <tr> <td><strong>掃描槍IP: </strong> <input id="Text_Date1" type="text" /> </td> </tr> </table> </fieldset> </div> </div> <div> <table id="grid"></table> <div id="pager"></div> </div>
到此這篇關於Jquery使用JQgrid元件處理json資料的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45