在介绍排序与查询之前,先介绍一下Pager、Navigator和自定义按钮。
默认情况下,Pager Bar分为3个部分:
1. Pager和Record Information的常用属性
在jqGrid的options选项中,有许多是专门针对Pager的,之前的例子中已经使用了一个——“pager”选项,用来指明Pager Bar在页面中对应的区域。
主要的属性有:
注1:这些属性(选项),并不都是可以用jqGrid的setGridParam方法在初始化之后改变值的。比如pgtext、recordtext、rowNum就是可以修改的,而其余的都是不能修改的,也即只能使用默认值,或者在jqGrid初始化的时候就定义好了。
注2:在jqGrid创建并初始化之后,修改这些关于Pager的属性,都必须执行trigger("reloadGrid")才能生效。
注3:在第一篇文章中我曾写到,经过测试jqGrid的caption似乎也不能用setGridParam方法改变并生效。我再次查了一下文档,发现这个选项也明确标注着也是不能改变,除非使用相应的setCaption方法。
2. Navigator
默认有6个预定义好的按钮:
Navigator通过navGrid方法来配置导航栏,用法是:
$("#grid_id").navGrid('#gridpager',{parameters},prmEdit, prmAdd, prmDel, prmSearch, prmView);
或
$("#grid_id").jqGrid('navGrid','#gridpager',{parameters},prmEdit, prmAdd, prmDel, prmSearch, prmView);
关于各种参数的具体说明,请参考官方文档(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:navigator )
2.1 关于Navigator的参数
借助这些选项,可以将上一篇中的例子,修改一下,更多的借助jqGrid内置的功能。例如,当载入行数据到对话框时,之前是通过在自定义的loadSelectedRowData方法中,调用jqGrid("getGridParam", "selrow")来检查是否有选中的数据行。现在在点击编辑或删除按钮的时候,可以通过jqGrid自己检查是否有选中的数据行,如果没有则弹出提示。如果有则选中的行,则还会将行id作为参数,传入对应的函数方法中。
将代码修改如下:
$(function(){ ... $("#gridTable").jqGrid("navGrid", "#gridPager", { addfunc : openDialog4Adding, // (1) 点击添加按钮,则调用openDialog4Adding方法 editfunc : openDialog4Updating, // (2) 点击编辑按钮,则调用openDialog4Updating方法 delfunc : openDialog4Deleting, // (3) 点击删除按钮,则调用openDialog4Deleting方法 alerttext : "请选择需要操作的数据行!" // (4) 当未选中任何行而点击编辑、删除、查看按钮时,弹出的提示信息 }); ... }); var openDialog4Adding = function() { var consoleDlg = $("#consoleDlg"); var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane"); consoleDlg.find("input").removeAttr("disabled").val(""); dialogButtonPanel.find("button:not(:contains('取消'))").hide(); dialogButtonPanel.find("button:contains('创建')").show(); consoleDlg.dialog("option", "title", "创建新联系人").dialog("open"); }; var openDialog4Updating = function(rowid) { // (6) 接受选中行的id为参数 var consoleDlg = $("#consoleDlg"); var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane"); consoleDlg.find("input").removeAttr("disabled"); dialogButtonPanel.find("button:not(:contains('取消'))").hide(); dialogButtonPanel.find("button:contains('保存')").show(); consoleDlg.dialog("option", "title", "修改联系人信息"); loadSelectedRowData(rowid); // (7) 将选中行id传入loadSelectedRowData方法 }; var openDialog4Deleting = function(rowid) { // (8) 接受选中行的id为参数 var consoleDlg = $("#consoleDlg"); var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane"); consoleDlg.find("input").attr("disabled", true); dialogButtonPanel.find("button:not(:contains('取消'))").hide(); dialogButtonPanel.find("button:contains('删除')").show(); consoleDlg.dialog("option", "title", "删除联系人"); loadSelectedRowData(rowid); }; var loadSelectedRowData = function(selectedRowId) { // (9) 接受选中行的id为参数 var params = { "contact.id" : selectedRowId }; var actionUrl = "viewContact.action"; // 从Server读取对应ID的JSON数据 $.ajax( { url : actionUrl, data : params, dataType : "json", cache : false, error : function(textStatus, errorThrown) { alert("系统ajax交互错误: " + textStatus); }, success : function(data, textStatus) { // 如果读取结果成功,则将信息载入到对话框中 var rowData = data.contact; var consoleDlg = $("#consoleDlg"); consoleDlg.find("#selectId").val(rowData.id); consoleDlg.find("#lastName").val(rowData.lastName); consoleDlg.find("#firstName").val(rowData.firstName); consoleDlg.find("#certificateNo").val(rowData.certificateNo); consoleDlg.find("#email").val(rowData.email); consoleDlg.find("#telNo").val(rowData.telNo); consoleDlg.find("#address").val(rowData.address); consoleDlg.find("#idCardNo").val(rowData.idCardNo); consoleDlg.find("#nationality").val(rowData.nationality); // 根据新载入的数据将表格中的对应数据行一并刷新一下 var dataRow = { id : rowData.id, lastName : rowData.lastName, firstName : rowData.firstName, email : rowData.email, telNo : rowData.telNo }; $("#gridTable").jqGrid("setRowData", data.contact.id, dataRow); // 打开对话框 consoleDlg.dialog("open"); } }); };
说明:(2)(3)处意味着,当点击编辑或删除按钮时,如果有数据行被选中,则将行id作为参数传入对应的openDialog4Updating和openDialog4Deleting方法中;如果没有选中的行,则将弹出窗口,提示信息。
2.2 关于prmEdit、prmAdd、prmDel、prmSearch、prmView的参数
jqGrid本身为这些参数定义了默认值,而且不同的language文件也有各自的定义来覆盖原始的默认值。我们也可以在jqGrid重新定义新的值,以覆盖默认的值。
例如:
$("#gridTable").jqGrid("navGrid", "#gridPager", { addfunc : openDialog4Adding, editfunc : openDialog4Updating, delfunc : openDialog4Deleting, alerttext : "请选择需要操作的数据行!" }, {}, // prmEdit {}, // prmAdd {}, // prmDel { // prmSearch caption: "查找", Find: "Let's go!", multipleSearch : true }, {} // prmView );
具体的参数如下,也可参考官方文档(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:navigator )
$.jgrid = { ... search : { caption: "Search...", Find: "Find", Reset: "Reset", odata : ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'], groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ], matchText: " match", rulesText: " rules" }, edit : { addCaption: "Add Record", editCaption: "Edit Record", bSubmit: "Submit", bCancel: "Cancel", bClose: "Close", saveData: "Data has been changed! Save changes?", bYes : "Yes", bNo : "No", bExit : "Cancel", }, view : { caption: "View Record", bClose: "Close" }, del : { caption: "Delete", msg: "Delete selected record(s)?", bSubmit: "Delete", bCancel: "Cancel" }, nav : { edittext: "", edittitle: "Edit selected row", addtext:"", addtitle: "Add new row", deltext: "", deltitle: "Delete selected row", searchtext: "", searchtitle: "Find records", refreshtext: "", refreshtitle: "Reload Grid", alertcap: "Warning", alerttext: "Please, select row", viewtext: "", viewtitle: "View selected row" }, ...
3. 自定义按钮
jqGrid还允许将自定义的按钮加入Page Bar,具体API是:
$("#grid_id").navGrid("#pager",...).navButtonAdd("#pager",{parameters});
或者
$("#grid_id").jqGrid('navGrid',"#pager",...).jqGrid('navButtonAdd',"#pager",{parameters});
关于navButtonAdd的属性:
4. 自定义分隔符
$("#grid_id").navSeparatorAdd('#pager',{separator_parameters});
相关属性:
附:相关代码
javascript部分:
$(function(){ // 配置jqGrid组件 $("#gridTable").jqGrid({ url: "jqGrid03.action", datatype: "json", mtype: "GET", height: 350, width: 600, colModel: [ {name:"id",index:"id",label:"编码",width:40}, {name:"lastName",index:"lastName",label:"姓",width:80,sortable:false}, {name:"firstName",index:"firstName",label:"名",width:80,sortable:false}, {name:"email",index:"email",label:"电子邮箱",width:160,sortable:false}, {name:"telNo",index:"telNo",label:"电话",width:120,sortable:false} ], viewrecords: true, rowNum: 15, rowList: [15,50,100], prmNames: {search: "search"}, jsonReader: { root:"gridModel", records: "record", repeatitems : false }, pager: "#gridPager", caption: "联系人列表", hidegrid: false, shrikToFit: true }); var alertText = "<div style="margin:0.3em; background:#FFFFFF; border:1px solid #A6C9E2; padding: 0.5em;" mce_style="margin:0.3em; background:#FFFFFF; border:1px solid #A6C9E2; padding: 0.5em;">请选择需要操作的数据行!</div>"; $("#gridTable").jqGrid("navGrid", "#gridPager", { addfunc : openDialog4Adding, // (1) 点击添加按钮,则调用openDialog4Adding方法 editfunc : openDialog4Updating, // (2) 点击添加按钮,则调用openDialog4Updating方法 delfunc : openDialog4Deleting, // (3) 点击添加按钮,则调用openDialog4Deleting方法 alerttext : alertText // (4) 当未选中任何行而点击编辑、删除、查看按钮时,弹出的提示信息 },{},{},{},{ // (5) 修改于查询相关的prmSearch参数 caption: "查找", Find: "Let's go!", multipleSearch: true, groupOps: [{ op: "AND", text: "全部" }], },{}); // 配置对话框 $("#consoleDlg").dialog({ autoOpen: false, modal: true, // 设置对话框为模态(modal)对话框 resizable: true, width: 480, buttons: { // 为对话框添加按钮 "取消": function() {$("#consoleDlg").dialog("close")}, "创建": addContact, "保存": updateContact, "删除": deleteContact } }); }); var openDialog4Adding = function() { var consoleDlg = $("#consoleDlg"); var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane"); consoleDlg.find("input").removeAttr("disabled").val(""); dialogButtonPanel.find("button:not(:contains('取消'))").hide(); dialogButtonPanel.find("button:contains('创建')").show(); consoleDlg.dialog("option", "title", "创建新联系人").dialog("open"); }; var openDialog4Updating = function(rowid) { // (6) 接受选中行的id为参数 var consoleDlg = $("#consoleDlg"); var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane"); consoleDlg.find("input").removeAttr("disabled"); dialogButtonPanel.find("button:not(:contains('取消'))").hide(); dialogButtonPanel.find("button:contains('保存')").show(); consoleDlg.dialog("option", "title", "修改联系人信息"); loadSelectedRowData(rowid); // (7) 将选中行id传入loadSelectedRowData方法 } var openDialog4Deleting = function(rowid) { // (8) 接受选中行的id为参数 var consoleDlg = $("#consoleDlg"); var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane"); consoleDlg.find("input").attr("disabled", true); dialogButtonPanel.find("button:not(:contains('取消'))").hide(); dialogButtonPanel.find("button:contains('删除')").show(); consoleDlg.dialog("option", "title", "删除联系人"); loadSelectedRowData(rowid); } var loadSelectedRowData = function(selectedRowId) { // (9) 接受选中行的id为参数 var params = { "contact.id" : selectedRowId }; var actionUrl = "viewContact.action"; // 从Server读取对应ID的JSON数据 $.ajax( { url : actionUrl, data : params, dataType : "json", cache : false, error : function(textStatus, errorThrown) { alert("系统ajax交互错误: " + textStatus); }, success : function(data, textStatus) { // 如果读取结果成功,则将信息载入到对话框中 var rowData = data.contact; var consoleDlg = $("#consoleDlg"); consoleDlg.find("#selectId").val(rowData.id); consoleDlg.find("#lastName").val(rowData.lastName); consoleDlg.find("#firstName").val(rowData.firstName); consoleDlg.find("#certificateNo").val(rowData.certificateNo); consoleDlg.find("#email").val(rowData.email); consoleDlg.find("#telNo").val(rowData.telNo); consoleDlg.find("#address").val(rowData.address); consoleDlg.find("#idCardNo").val(rowData.idCardNo); consoleDlg.find("#nationality").val(rowData.nationality); // 根据新载入的数据将表格中的对应数据行一并刷新一下 var dataRow = { id : rowData.id, lastName : rowData.lastName, firstName : rowData.firstName, email : rowData.email, telNo : rowData.telNo }; $("#gridTable").jqGrid("setRowData", data.contact.id, dataRow); // 打开对话框 consoleDlg.dialog("open"); } }); }; var addContact = function() { var consoleDlg = $("#consoleDlg"); var pLastName = $.trim(consoleDlg.find("#lastName").val()); var pFirstName = $.trim(consoleDlg.find("#firstName").val()); var pEmail = $.trim(consoleDlg.find("#email").val()); var pTelNo = $.trim(consoleDlg.find("#telNo").val()); var pAddress = $.trim(consoleDlg.find("#address").val()); var pIdCardNo = $.trim(consoleDlg.find("#idCardNo").val()); var pNationality = $.trim(consoleDlg.find("#nationality").val()); var params = { "contact.lastName" : pLastName, "contact.firstName" : pFirstName, "contact.email" : pEmail, "contact.telNo" : pTelNo, "contact.address" : pAddress, "contact.idCardNo" : pIdCardNo, "contact.nationality" : pNationality }; var actionUrl = "createContact.action" $.ajax( { url : actionUrl, data : params, dataType : "json", cache : false, error : function(textStatus, errorThrown) { alert("系统ajax交互错误: " + textStatus); }, success : function(data, textStatus) { if(data.ajaxResult == "success") { var dataRow = { id : data.contact.id, // 从Server端得到系统分配的id lastName : pLastName, firstName : pFirstName, email : pEmail, telNo : pTelNo }; var srcrowid = $("#gridTable").jqGrid("getGridParam", "selrow"); if(srcrowid) { $("#gridTable").jqGrid("addRowData", data.contact.id, dataRow, "before", srcrowid); } else { $("#gridTable").jqGrid("addRowData", data.contact.id, dataRow, "first"); } consoleDlg.dialog("close"); alert("联系人添加操作成功!"); } else { alert("添加操作失败!"); } } }); }; var updateContact = function() { var consoleDlg = $("#consoleDlg"); var pId = $.trim(consoleDlg.find("#selectId").val()); var pLastName = $.trim(consoleDlg.find("#lastName").val()); var pFirstName = $.trim(consoleDlg.find("#firstName").val()); var pEmail = $.trim(consoleDlg.find("#email").val()); var pTelNo = $.trim(consoleDlg.find("#telNo").val()); var pAddress = $.trim(consoleDlg.find("#address").val()); var pIdCardNo = $.trim(consoleDlg.find("#idCardNo").val()); var pNationality = $.trim(consoleDlg.find("#nationality").val()); var params = { "contact.id" : pId, "contact.lastName" : pLastName, "contact.firstName" : pFirstName, "contact.email" : pEmail, "contact.telNo" : pTelNo, "contact.address" : pAddress, "contact.idCardNo" : pIdCardNo, "contact.nationality" : pNationality }; var actionUrl = "updateContact.action"; $.ajax( { url : actionUrl, data : params, dataType : "json", cache : false, error : function(textStatus, errorThrown) { alert("系统ajax交互错误: " + textStatus); }, success : function(data, textStatus) { if (data.ajaxResult == "success") { var dataRow = { id : data.contact.id, lastName : pLastName, firstName : pFirstName, email : pEmail, telNo : pTelNo }; $("#gridTable").jqGrid("setRowData", data.contact.id, dataRow, {color:"#FF0000"}); alert("联系人信息更新成功!"); consoleDlg.dialog("close"); } else { alert("修改操作失败!"); } } }); }; var deleteContact = function() { var consoleDlg = $("#consoleDlg"); var pId = $.trim(consoleDlg.find("#selectId").val()); var params = { "contact.id" : pId }; var actionUrl = "deleteContact.action"; $.ajax({ url : actionUrl, data : params, dataType : "json", cache : false, error : function(textStatus, errorThrown) { alert("系统ajax交互错误: " + textStatus); }, success : function(data, textStatus) { if (data.ajaxResult == "success") { $("#gridTable").jqGrid("delRowData", pId); consoleDlg.dialog("close"); alert("联系人删除成功!"); } else { alert("删除操作失败!"); } } }); };