jqGrid表头排序问题及解决办法

转自:https://www.exp99.com/f2e/qianduankaifa_225.html

作者:益享天开

jqGrid排序问题及解决办法

益享天开    2016-02-21    www.exp99.com    前端开发    

jqGrid

【摘要】最近在项目中发现jqGrid一个排序的问题,本文就jqGrid数据表中数字或金额无法正常排序说明解决办法。

jqGrid数据表排序
jqGrid数据表排序

请看图中的“库存量”和“销售价”,其排序并未按照常规的数字大小执行,而是按字符串的形式来排序了!

实际项目中,后台返回的JSON数据是按照我给的排序条件正常返回到前端的(这里以“库存量”为例):

AJAX请求参数(排序条件)

 
  1. var sData = { 
  2.   page:0 
  3.   pageSize:12 
  4.   sort:{"storQuantity":"desc"} 

AJAX回调(后台根据前端的排序条件返回)

 
  1.   "data" : [ { 
  2.     "id" : 127215, 
  3.     "storQuantity" : 1397 
  4.   }, 
  5.   { 
  6.     "id" : 127214, 
  7.     "storQuantity" : 1000 
  8.   }, 
  9.   { 
  10.     "id" : 98998 
  11.     "storQuantity" : 999 
  12.   }] 
  13.   //省略... 

前端jqGrid主要代码

 
  1. $node.jqGrid({ 
  2.   data:jsonData, 
  3.   datatype:"local", 
  4.   width:'100%', 
  5.   height:'500', 
  6.   loadonce: false, 
  7.   colNames:['库存量','采购价','销售价','分类','医保类别'], 
  8.   colModel:[{name:'storQuantity',sorttype:'integer'},{name:'inPrice',sorttype:'float'},{name:'salePrice',sorttype:'float'},{name:'type'},{name:'miType'}] 
  9. }) 

jqGrid字段排序问题的解决办法

jqGrid初始化时,给库存量、采购价、销售价加上sorttype属性(默认缺省是string),参照colModel属性值。

整数sorttype的值为integer整型,金额sorttype的值为float浮点型。

说明:设置sorttype属性只有当datatype为local时有效!

附:colModel主要属性表一览

配置项类型描述默认值
alignstring定义单元格中内容对齐方式,可用值: left, center, right.left
cellattrfunction这个方法在创建单元格内容的时候给单元格添加附加到属性。所有可用的单元格属性或者style属性中可用的值都可以使用,这个方法需要返回字符串。传递进入这个配置方法的参数如下
rowId - 单元格所属行id
val - 显示在单元格中的值
rawObject -原始的数据行对象。如果jqGrid配置中datatype为json,则为array对象。datatype为xml时则为xml node节点
cm - 所有colModel中配置的属于此列的属性
rdata - the data row which will be inserted in the row.  参数为键值对对象数组,name为colModel定义的name
null
classesstring给单元格添加附加样式。如果有多个样式需要添加,样式用空格隔开。例如:classes:'class1 class2' 将会给此列单元格设置class1和class2样式。在css中有一个预定义的样式ui-ellipsis允许附加到特定的行empty string
datefmtstringsorttype配置为date(datetype被设置为local)或者editrules 配置为{date:true} 字段时,定义日期的显示格式。使用如php类型的时间格式。“/”,“-”,“.”可用于的时间分隔符号。可用的时间格式如下
y,Y,yyyy :对应4位数字的年份
YY, yy :对应2位数字的年份
m,mm :对应月份
d,dd :对应日期
Date (Y-m-d)
defvalstring作为搜索字段的默认值。只用于自定义搜索时的初始值empty
editableboolean定义字段是否可以编辑。用于单元格,行编辑,和表单编辑false
editoptionsarray依据edittype提供允许的值列表empty array
editrulesarray给可编辑子都设置附加的规则empty array
edittypestring给行,表单编辑配置字段编辑类型。可能的值: text, textarea, select, checkbox, password, button, image and filetext
firstsortorderstring设置为asc或者desc时,初始化时列将会按照这个进行排序。 随后排序将会轮流切换。null
fixedboolean即使jqGrid的shrinkToFit配置为ture时,当此配置为true,也不允许重新计算列的宽度。如果shrinkToFit为true,当jqGrid容器宽度变化后调用setGridWidth 方法也不会修改此列宽度。false
formattermixed默认类型(string)或者客户自定义函数控制此字段的显示格式none
frozenboolean设置为ture,此列将为固定的,不允许拖拽改变位置。false
hidedlgboolean设置为true此列将不会出现在模式对话框中,用户可以选择此列的显示或者隐藏false
hiddenboolean定义是否隐藏此列在初始化时。false
indexstring通过sidx参数设置排序时的索引名empty string
jsonmapstring定义此列数据键和json数据源中的映射关系none
keyboolean如果从服务器获取的数据部包含id,可以通过此配置指定唯一id列。只有一列能指定此属性,如果多列配置了这个属性,第一个配置的生效,后续会被忽略。false
labelstring如果jqGrid的colNames数组为空,这个将作为此列的列头。如果colNames和这个配置为空,那name配置将作为此列的列头。none
namestring设置此列的唯一名称。name是必须的。jqGrid配置的事件名称和属性名称,保留字不能作为此配置项的值,包括subgrid,cb和rn。Required
resizableboolean定义此列是否允许调整宽度true
searchboolean当配置了查询模块后,是否允许将此列作为查询条件true
sortableboolean定义是否允许点击列表头进行排序true
sorttypemixed当datatype为local时有效。定义适当的排序类型。可用值
int/integer :按照整数排序
float/number/currency:按照数字排序
date :日期排序
text :文本排序
function :按照自定义函数来排序。自定义函数接受此列排序的值,需要返回一个值。【原文: To this function we pass the value to be sorted and it should return a value too.】应该和javascript数组排序使用函数作为参数排序差不多,return-1/0/1
text
stypestring定义查询对象的类型text
templateobject设置colModel有效属性。当你希望覆盖列模式默认值时配置这个比较有用。 See cmTemplate in grid optionsnull
titleboolean如果设置为false,当鼠标移动到单元格上时不显示title提示信息。true
widthnumber设置初始化列宽,单位px。注意不能设置为百分比150
xmlmapstring定义此列和xml文件中的xml节点映射none
unformatfunction返回单元格的原始值,详细参考:jqGrid自定义格式化类型(在排序时也会调用unformat,在排序过程中返回值用于比较)null
viewableboolean此配置仅在viewGridRow 方法下有效。当配置为false时此列不会出现在view Form中。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 C# 后台封装 jqGrid 表头条件搜索,你可以按照以下步骤进行: 1. 在后台定义一个方法,该方法接收 jqGrid 发送过来的搜索条件,并返回符合条件的数据列表,例如: ``` public List<MyModel> GetMyData(string sidx, string sord, int page, int rows, string filters) { // 解析搜索条件 JObject search = JObject.Parse(filters); JArray rules = (JArray)search["rules"]; // 构造查询条件 string where = ""; foreach (JObject rule in rules) { string field = (string)rule["field"]; string op = (string)rule["op"]; string data = (string)rule["data"]; switch (op) { case "eq": where += $" AND {field} = '{data}'"; break; case "ne": where += $" AND {field} <> '{data}'"; break; case "lt": where += $" AND {field} < '{data}'"; break; case "le": where += $" AND {field} <= '{data}'"; break; case "gt": where += $" AND {field} > '{data}'"; break; case "ge": where += $" AND {field} >= '{data}'"; break; case "cn": where += $" AND {field} LIKE '%{data}%'"; break; } } // 查询数据并返回 List<MyModel> data = db.MyTable.Where($"1 = 1 {where}") .OrderBy($"{sidx} {sord}") .Skip((page - 1) * rows) .Take(rows) .ToList(); return data; } ``` 在上面的代码中,`sidx` 和 `sord` 参数表示排序字段和排序方式,`page` 和 `rows` 参数表示当前页码和每页显示的记录数,`filters` 参数表示搜索条件。该方法首先解析搜索条件,然后根据搜索条件构造查询条件,并使用 LINQ 查询数据并返回。 2. 在前端调用后台方法,并将搜索条件传递给后台,例如: ``` $("#grid").jqGrid({ url: "MyController/GetMyData", postData: { sidx: "id", sord: "desc", page: 1, rows: 10, filters: "" }, datatype: "json", colModel: [ { name: "id", index: "id", width: 55 }, { name: "name", index: "name", width: 90 }, { name: "category", index: "category", width: 80, stype: "select", searchoptions: { value: ":All;1:Category 1;2:Category 2" } }, { name: "price", index: "price", width: 80, align: "right", formatter: "currency", formatoptions: { decimalSeparator: ".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "$ " }, searchoptions: { sopt: ["eq", "ne", "lt", "le", "gt", "ge"] } }, ], rowNum: 10, rowList: [10, 20, 30], pager: "#pager", sortname: "id", viewrecords: true, sortorder: "desc", caption: "jqGrid Example", height: "auto", autowidth: true, search: true, searchOnEnter: false, searchOperators: true, searchToolbar: true, onSearch: function () { var postData = $("#grid").getGridParam("postData"); postData.filters = JSON.stringify($("#grid")[0].p.postData.filters); $("#grid").setGridParam({ postData: postData }).trigger("reloadGrid"); }, }); ``` 在上面的代码中,`url` 属性指定后台方法的 URL,`postData` 属性指定传递给后台的参数,`onSearch` 事件在用户点击搜索按钮时触发,该事件将搜索条件转换为 JSON 字符串,并将其作为 `filters` 参数传递给后台方法。 通过以上步骤,你就可以在 C# 后台封装 jqGrid 表头条件搜索了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值