【问题标题】:jqGrid Date column sort does not work with sorttype:'date'jqGrid 日期列排序不适用于 sorttype:'date'
【发布时间】:2013-10-13 21:16:04
【问题描述】:

我在 MVC 4 中使用 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

{
    name: 'TestOrderDate', index: 'TestOrderDate', formatter: 'date',
    sorttype: 'date', width: 90, align: 'center', fixed: true,
    formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' }
},

& 用于日期时间列

{
    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 setting & jason datatype for grid。
  • 您使用哪个版本的 jqGrid?你能把服务器返回的日期格式改成ISO 8601吗?推荐的格式与您解释的问题无关。在这种情况下,您可以使用srcformat: "ISO8601Long"
  • 好吧,我之前在服务器端将日期格式化为字符串,但我的客户建议我需要根据存储过程返回的数据使用数据类型将数据返回到网格。即对于日期时间值,我需要在 jqGrid 的记录中返回 c# DateTime 值。我不能使用当前设置吗?
  • 您使用哪个版本的 jqGrid?

标签: jqgrid


【解决方案1】:

我建议您将 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.cssThe line 被替换为 the line

【讨论】:

  • 请查看问题编辑摘要并为我的问题提出解决方案。
  • @Shaggy:抱歉,但您对问题的最后更改似乎是您确实尝试发布 新问题。 stackoverflow 的主要目标是分享常见问题和相应的答案。任何交换问题都会降低搜索引擎的效率,其他用户在 stackoverflow 上找不到相同的问题。所以请始终提出单独的问题
  • @Shaggy:如果我正确理解你需要的是$.jgrid.parseDate 或`$.fn.fmatter.call(this, "date", cellval, opts, rowObject, action)`的用法在LoadCPAPFollowUpDialog 内部。在你分开你的问题后,我会发布我的答案。
  • 感谢您的建议。我删除了此问题中的更改并使用我为它实施的解决方案发布了新问题here。请告诉我它是否正确。
  • 您好,您帮我解决了 jqGrid 问题。感谢您一直以来的帮助。目前,我面临另一个问题,即服务器端分页未调用的操作方法。请解决问题here 并建议我解决此问题。
【解决方案2】:

jqGrid 不支持按日期时间排序,只支持按日期排序。因此,您可以使用其 PDF 中给出的替代方法,即如下例所示。如果您在网格中的数据已经按 Date 和 Time 排序,并且您还有一列,其中所有行的索引都像 Numbers 一样为 1, 2, 3, .... n 。您可以对索引列上的日期时间进行排序。这将始终确保日期时间的 asc 或 desc 顺序。

您可以通过另一个 Column 内容对 jqGrid 的 DATE 和时间或日期进行排序。比如下面关于 onSortCOl 的例子:

            onSortCol: function(name,index) { if(name == 'createDateTime') { jQuery("#viewNotesGrid").setGridParam({sortname:"ID"}); } }

【讨论】:

    【解决方案3】:

    我的解决方法是欺骗 jqGrid 加载一个 int 但显示一个日期。

    我的 colModel 是 {name: 'startDt', index: 'startDt', width: 50, sortable: true, sorttype: 'int', formatter: 'date', formatoptions: { srcformat: "U", newformat: "dMY"}},

    当您加载网格数据时,将您的日期字符串转换为毫秒除以 1000。所以在我的例子中 startDt 是一个非常大的整数值。

    如果您的日期为空白/null,只需使用 '' 加载网格。

    很好的是,空白/null 现在已正确排序。升序首先有空白/null(s),降序有空白/null(s) 最后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2015-08-01
      • 2018-11-22
      • 2015-02-06
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多