jqGrid Date column sort does not work with sorttype:'date'
我在MVC4中使用jqgrid来显示数据。我有一个包含日期/日期时间列的网格。我返回的是网格日期列的C DateTime变量数据;它与日期列的formatoption: {srcformat: 'm/d/Y', newformat: 'm/d/Y'}和日期列的formatoption: {srcformat: 'm/d/Y h:i:s', newformat: 'm/d/Y h:i:s A'}显示良好。但当用户单击列标题时,此列的排序不会反映出来。这是日期栏的colModel
1 2 3 4 5
| {
name: 'TestOrderDate', index: 'TestOrderDate', formatter: 'date',
sorttype: 'date', width: 90, align: 'center', fixed: true,
formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' }
}, |
&对于日期时间列(amp;F)
1 2 3 4 5
| {
name: 'TestOrderDate', index: 'TestOrderDate', formatter: 'date',
sorttype: 'date', width: 90, align: 'center', fixed: true,
formatoptions: { srcformat: 'm/d/Y h:i:s', newformat: 'm/d/Y h:i:s A' }
}, |
号
有人能告诉我colModel的哪些问题是由于哪种行为不起作用造成的吗?
- 你用的是哪个datatype?您使用loadonce: true选项吗?
- 我正在为网格使用loadOnce:true设置&jason数据类型。
- 您使用的是哪个版本的jqgrid?你能把服务器返回的日期格式改成ISO 8601吗?建议的格式与您解释的问题无关。在这种情况下,您可以使用srcformat:"ISO8601Long"。
- 我以前在服务器端将日期格式化为字符串,但我的客户建议我根据从存储过程返回的数据使用数据类型将数据返回到网格。例如,对于日期时间值,我需要在jqgrid的记录中返回c date time值。我不能使用当前设置吗?
- 您使用的是哪个版本的jqgrid?
- 其jqgrid v4.1.1
- 你喜欢复古吗?版本为2.5年。我建议您更新到昨天发布的4.5.4版。它包含解析日期的全新版本。
- 谢谢你的建议,但我不能马上换新版本。如果您在我的当前版本中为我提供此修复程序,它将非常完整。
- 一旦开发完成,在第一次发布之前,我肯定会切换到新版本。
- @用于切换到较新版本的oleg;它只是更改jqgridJS&css文件还是更多。如果我只需要替换现有的JS文件,那么这些文件是什么?
- 要使用jqgrid,需要包含3个文件:ui.jqgrid.css、grid.locale-en.js和jquery.jqGrid.min.js(或jquery.jqGrid.src.js)—请参见示例。因此,您需要从这里下载jqgrid的最新版本(点击底部的"下载"按钮),并替换ui.jqgrid.css(有时需要ellipsis-xbl.xml和grid.locale-en.js和jquery.jqGrid.min.js或jquery.jqGrid.src.js。你可以用Nuget替代
- 你好,奥列格,我已经升级到最新版本了。现在它按预期的日期列工作。但是你能给我介绍一下ellipsis-xbl.xml文件吗?我的解决方案中没有包含该文件;如果需要,请将其包括在我应该包括的目录中。还有一件事,你可以把它作为答案贴得更远,这样我就可以把它标记为答案,或者我如何把你的评论标记为答案?
- 你是对的。该文件将不会在当前版本的jqgrid中使用。它仅用于旧版本的firefox/mozilla浏览器。比较4.3.1版的ui.jqgrid.css行和当前版本的对应行。我认为可以删除文件ellipsis-xbl.xml。
jqgrid不支持按日期时间排序,只支持按日期排序。因此,您可以使用PDF中给出的备选方案,如下面的示例所示。如果网格中的数据已经按日期和时间排序,并且您还有一个列,其中所有行的索引(如数字)都是1、2、3、…。n。可以对索引列上的日期时间进行排序。这将始终确保日期时间的升序或降序。
可以按其他列内容对jqgrid的日期和时间或日期进行排序。如以下OnSortCol示例所示:
1
| onSortCol: function(name,index) { if(name == 'createDateTime') { jQuery("#viewNotesGrid").setGridParam({sortname:"ID"}); } } |
我的解决方法是欺骗jqgrid加载int,但显示日期。
我的阴道模型是name:'startdt',index:'startdt',width:50,sortable:true,sorttype:'int',formatter:'date',formatoptions:srcformat:u,newformat:d-m-y",
加载网格数据时,将日期字符串转换为毫秒除以1000。所以在我的例子中,startdt是一个非常大的整数值。
如果日期为空/空,只需加载带有""的网格。
好的是空白/NULL现在被正确排序。升序前有空/空,降序后有空/空。
我建议您将2.5年前的4.1.1版更新为4.5.4版。它包含了日期解析的新实现。要对具有sorttype:'date'选项jqgrid的列进行排序,请先分析(取消格式化)网格中显示的字符串。在旧版本的jqgrid中,不支持像'm/d/Y h:i:s A'这样的格式来解析(和排序)。
从4.3.2开始的jqgrid版本不需要文件ellipsis-xbl.xml。在早期版本中,它用于在旧版本的Mozilla/Firefox浏览器中显示省略号。从4.3.2开始,将ui.jqgrid.css线替换为4.3.2线。
- 请查看问题编辑摘要并为我的问题建议解决方案。
- @谢吉:对不起,但你对问题的最后一次修改似乎是你真的试图发布新的问题。StackOverflow的主要目标是共享常见问题和相应的答案。任何交换性的问题都会降低搜索引擎的效率,而其他用户在stackoverflow上找不到相同的问题。因此,请始终单独提问。
- @Shaggy:如果我正确理解你需要的是$.jgrid.parseDate或`$.fn.fmatter.call(this,"date",cellval,opts,rowobject,action)`在LoadCPAPFollowUpDialog内部的用法。你把问题分开后,我会把答案贴出来。
- 谢谢你的建议。我删除了此问题中的更改,并在此处发布了新问题以及为其实现的解决方案。请告诉我是否正确。
- 嗨,你帮我解决了jqgrid问题。谢谢你的帮助。目前,我还面临另一个操作方法的问题,即服务器端分页未调用该方法。请在此处解决该问题并建议我解决该问题。
- @沙吉:我看到这个问题了,但我不清楚它的描述。首先,不清楚你是如何使用DefineGrid。为什么你需要一个只能使用一次的函数。此外,我不认为您以任何方式实现了服务器端分页(不会使用startIndex)。DMEUploadDetails也未知。Year和Month是DMEUploadDetails的唯一属性吗?我可以继续回答更多的问题…另外,我认为您需要使用定义为函数的postData的属性(请参见答案)。
- 我更改了Grid&Action方法的定义,以传递间接的PostData参数而不是模型对象。现在开始工作了。但我有另一个与之相关的问题。我已经更新了问题,请审阅并为我提供此要求的解决方案。很紧急,如果你能尽快答复,我将不胜感激。谢谢