You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JsonResult中按日期及单据号后缀规则降序排序?

实现自定义降序排序(C#后端 + jqGrid前端)

我来帮你搞定这个排序需求,咱们分后端C#处理和前端jqGrid配置两部分来调整:

一、后端C#代码修改

你需要在生成JSON数据的LINQ查询中加入排序逻辑,先按日期(INDENTDATE)降序,再按INDENTNO最后三位数字降序。修改GetStoreIndNo方法中生成jsondata的部分:

var jsondata = new {
    rows = (from DataRow row in load.Rows
            // 先按日期降序:将字符串日期转成DateTime类型确保排序准确
            orderby DateTime.ParseExact(("" + row["INDENTDATE"]).Trim(), "dd/MM/yyyy", null) descending,
                   // 再按INDENTNO最后三位数字降序:提取最后三位转成int排序
                   int.Parse(("" + row["INDENTNO"]).Trim().Substring(("" + row["INDENTNO"]).Trim().Length - 3)) descending
            select new {
                id = ("" + row["INDENTNO"]).Trim(),
                cell = new string[] {
                    GeneralFunction.GetDate(("" + row["INDENTDATE"]).Trim()),
                    ("" + row["INDENTNO"]).Trim()
                }
            }).ToArray()
};

注意事项:

  • 日期解析用ParseExact指定dd/MM/yyyy格式,避免因系统文化差异导致的解析错误;
  • 如果INDENTNO存在长度不足3的情况,建议加个安全判断,避免报错:
    int.TryParse(("" + row["INDENTNO"]).Trim().Substring(Math.Max(0, ("" + row["INDENTNO"]).Trim().Length - 3)), out int indentSuffix)
    
    然后用indentSuffix参与排序。

二、前端jqGrid配置调整

因为后端已经返回排好序的数据,你可以调整jqGrid的排序相关配置,确保前端直接使用已排序的结果:

  1. 排序状态配置:

    • 如果你不需要前端触发二次排序,直接删除sortname: 'id', sortorder: 'desc'这两行;
    • 如果想保留排序状态的显示,也可以保留这两行,因为loadonce: true会让jqGrid默认使用后端返回的排序结果。
  2. 列映射校验:
    你的colModel顺序是INDDATE、INDENTNO,后端cell数组也是日期在前、编号在后,这部分匹配没问题,不需要调整。

额外优化(可选)

如果需要前端也支持按自定义规则排序(比如用户点击表头时),可以给INDENTNO列添加自定义排序函数:

{ 
    name: 'INDENTNO', 
    index: 'INDENTNO', 
    width: 140, 
    editable: false,
    sorttype: function(cellvalue) {
        // 提取最后三位转成数字用于排序
        return parseInt(cellvalue.substring(cellvalue.length - 3));
    }
}

同时把sortableColumns设为true,让用户可以点击表头触发排序。


内容的提问来源于stack exchange,提问作者user8763759

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:01:10