JQGrid 导出Excel 获取筛选条件
需求描述:页面加载后,进行相关数据搜索,要求点击导出按钮后 下载Excel文件。
思路:希望在点击【导出Excel】按钮时,获取到表格搜索时的filters内容。
在百度、api、jqgrid.js中翻阅后,找到解决属性postData
解决办法:$(window.frames[0].document).find(“#grid-table”).jqGrid(“getGridParam”,”postData”).filters
后台对filters转义的方法
namespace Common { /// <summary> /// 公共方法类 /// </summary> public class PublicFun { /// <summary> /// 解析查询条件拼接成sql /// </summary> /// <param name="feilterArr">条件对象数组</param> /// <returns></returns> public static string GetFileterStr(string feilterArr) { //动态条件 string searchCase = string.Empty; if (feilterArr==null||feilterArr.Equals("")) { return ""; } var mStream = new MemoryStream(Encoding.UTF8.GetBytes(feilterArr)); //使用Encoding.Default中文时将会乱码 DataContractJsonSerializer dcjson = new DataContractJsonSerializer(typeof(jqGridFilter)); jqGridFilter filters = (jqGridFilter)dcjson.ReadObject(mStream); if (filters.GroupOp == "AND") { searchCase += " 1=1 "; foreach (jqGridFilterRules rules in filters.JqGridFilterRulesList) { switch (rules.Op) { case "cn": searchCase += " and " + rules.Field + " like \'%" + rules.Data + "%\'"; break; case "nc": searchCase += " and " + rules.Field + " not like \'%" + rules.Data + "%\'"; break; case "gt": searchCase += " and " + rules.Field + ">\'" + rules.Data + "\'"; break; case "ge": searchCase += " and " + rules.Field + ">=\'" + rules.Data + "\'"; break; case "lt": searchCase += " and " + rules.Field + "<\'" + rules.Data + "\'"; break; case "le": searchCase += " and " + rules.Field + "<=\'" + rules.Data + "\'"; break; case "eq": searchCase += " and " + rules.Field + "=\'" + rules.Data + "\'"; break; case "true": searchCase += " and " + rules.Field + " like \'%" + rules.Data + "%\'"; break; case "ne": searchCase += " and " + rules.Field + "!=\'" + rules.Data + "\'"; break; default: break; } } } else { searchCase += " and (1=1"; foreach (jqGridFilterRules rules in filters.JqGridFilterRulesList) { switch (rules.Op) { case "cn": searchCase += " or " + rules.Field + " like \'%" + rules.Data + "%\'"; break; case "nc": searchCase += " or " + rules.Field + " not like \'%" + rules.Data + "%\'"; break; case "gt": searchCase += " or " + rules.Field + ">\'" + rules.Data + "\'"; break; case "ge": searchCase += " or " + rules.Field + ">=\'" + rules.Data + "\'"; break; case "lt": searchCase += " or " + rules.Field + "<\'" + rules.Data + "\'"; break; case "le": searchCase += " or " + rules.Field + "<=\'" + rules.Data + "\'"; break; case "eq": searchCase += " or " + rules.Field + "=\'" + rules.Data + "\'"; break; case "true": searchCase += " or " + rules.Field + "=\'" + rules.Data + "\'"; break; case "ne": searchCase += " or " + rules.Field + "!=\'" + rules.Data + "\'"; break; default: break; } } searchCase += ")"; } return searchCase; } } [DataContract] class jqGridFilter { // {"groupOp":"AND","rules":[{"field":"email","op":"cn","data":"1"},{"field":"orderno","op":"ge","data":"2"}]} private string groupOp = "AND"; private List<jqGridFilterRules> jqGridFilterRulesList; [DataMember(Name = "groupOp")] public string GroupOp { get { return groupOp; } set { groupOp = value; } } [DataMember(Name = "rules")] public List<jqGridFilterRules> JqGridFilterRulesList { get { return jqGridFilterRulesList; } set { jqGridFilterRulesList = value; } } } [DataContract] class jqGridFilterRules { private string field; private string op; private string data; [DataMember(Name = "field")] public string Field { get { return field; } set { field = value; } } [DataMember(Name = "op")] public string Op { get { return op; } set { op = value; } } [DataMember(Name = "data")] public string Data { get { return data; } set { data = value; } } } }
View Code
注:若使用上述方法解析filters
需将filters拼装成 {“groupOp”:”AND”,”rules”:[{“field”:”ID”,”op”:”true”,”data”:”20170907″}]}
拼装的字符串中必须使用 英文的双引号 “
加一个js拼装的方法
var filList = JSON.parse($("#grid-table").jqGrid("getGridParam", "postData").filters).rules; var fil = \'{"groupOp":"AND","rules":[\'; for (var i = 0, len = filList.length; i < len; i++) { if (i != 0) { fil += \',\'; } fil += \'{"field":"\' + filList[i].field + \'","op":"\' + filList[i].op + \'","data":"\' + filList[i].data + \'"}\'; } fil += \']}\';
View Code
本人使用的是C#,至于后台的Excel导出可查看我的相关博客