【问题标题】:Kendo grid date column not formatting剑道网格日期列未格式化
【发布时间】:2013-07-08 01:06:42
【问题描述】:

我有一个如下所示的KendoGrid,当我运行应用程序时,我没有得到date 列的预期格式。

$("#empGrid").kendoGrid({
    dataSource: {
        data: empModel.Value,
        pageSize: 10
    },

    columns: [
        {
            field: "Name",
            width: 90,
            title: "Name"
        },

        {
            field: "DOJ",
            width: 90,
            title: "DOJ",
            type: "date",
            format:"{0:MM-dd-yyyy}" 
        }
    ]
});

当我运行此程序时,我在 DOJ 列中收到“2013-07-02T00:00:00Z”。为什么不格式化?有什么想法吗?

【问题讨论】:

  • 抱歉 Myzifer,仍有问题。甚至我也尝试过类似模板:“#= kendo.toString(Date,'MM/dd/yyyy') #”。并尝试了这个onabai.wordpress.com/2012/09/28/… 但没有运气:(
  • 据我所知,关键组件是 parameterMap 设置,如果没有它,您在设置它时会遇到更大的困难,您是否需要有关 parameterMap 的更多详细信息?
  • 是的,你能提供更多关于parameterMap的细节
  • 对不起 Myzifer... 我尝试了同样的方法但不知何故失败了:(
  • 它显示了什么,您能否链接我的代码,以便我查看是否能发现任何错误,因为有时它可能是一个额外的字符或破坏它的最轻微的东西。

标签: date kendo-ui kendo-grid


【解决方案1】:

我找到了这条信息并让它正常工作。给我的数据是字符串格式的,所以我需要先用kendo.parseDate解析字符串,然后再用kendo.toString格式化。

columns: [
    {
        field: "FirstName",
        title: "FIRST NAME"
    },
    {
        field: "LastName",
        title: "LAST NAME"
    },
    {
        field: "DateOfBirth",
        title: "DATE OF BIRTH",
        template: "#= kendo.toString(kendo.parseDate(DateOfBirth, 'yyyy-MM-dd'), 'MM/dd/yyyy') #"
    },
...


参考:
  1. format-date-in-grid
  2. jsfiddle
  3. kendo ui date formatting

【讨论】:

  • 这确实有效,但我会在数据源上使用解析函数,然后按如下所述格式化而不是这样,因为它感觉更干净:)
【解决方案2】:

只需要将列的数据类型放入数据源中

dataSource: {
      data: empModel.Value,
      pageSize: 10,
      schema:  {
                model: {
                    fields: {
                        DOJ: { type: "date" }
                            }
                       }
               }  
           }

然后是你的陈述栏:

 columns: [
    {
        field: "Name",
        width: 90,
        title: "Name"
    },

    {
        field: "DOJ",
        width: 90,
        title: "DOJ",
        type: "date",
        format:"{0:MM-dd-yyyy}" 
    }
]

【讨论】:

  • 我使用最新版本做了几乎完全相同的事情,唯一的变化是 url,它显然不起作用。似乎 kendo 必须以这种方式获取用于格式化的日期对象,并且 odata 结果并不总是返回 js 日期对象,因此为了使其正常工作,您必须处理 parse 函数,如下所示:onabai.wordpress.com/2012/09/28/…。 ..问题似乎是.Net似乎在使用WebAPI和OData返回结果等情况下返回ISO格式的数据。
  • 换句话说“这取决于您的 OData 日期字符串的格式”,但这是一个假设,在这个答案中没有参考。
  • 这对我来说是正确的答案。有一个放错位置的右括号,因此没有考虑架构,我的第一个解决方案是 aholtry 发布的内容。如果没有架构且没有格式,日期将显示为问题中提到的 jestges (2013-07-02T00:00:00Z)。但是当我修复括号时,日期将显示完全详细(2016 年 1 月 1 日星期五 00:00:00 GMT-0800(太平洋标准时间)),那时format 属性开始工作,我可以得到摆脱接受答案的双重转换。
  • 这是干净且正确的方法。 1.在schema中声明列类型,然后使用如上所示的简单格式定义
  • 这对我有用,虽然我在字段上有type: "Date" 并从列属性中删除了这个属性。
【解决方案3】:

尝试将剑道网格中的日期格式化为:

columns.Bound(x => x.LastUpdateDate).ClientTemplate("#= kendo.toString(LastUpdateDate, \"MM/dd/yyyy hh:mm tt\") #");

【讨论】:

  • 这假设 MVC 包装器正在服务器上使用...samepl 表明询问的人正在使用 JS 客户端脚本来构建网格所以...没有帮助。
  • @Wardy,语法不同,格式字符串相同。明白了吗?仔细看,真的很近
  • 你忽略了我的观点......如果我要求解决 C# 中的问题,而你给了我一个 C++ 答案,它没有帮助......这是同一个概念。另外:剑道在客户端的行为并不总是与在服务器上的行为相同(事实上,它在客户端的两个不同地方的行为有一半时间并不相同)。
【解决方案4】:

这是使用 ASP.NET 的方法:

add .Format("{0:dd/MM/yyyy HH:mm:ss}"); 

    @(Html.Kendo().Grid<AlphaStatic.Domain.ViewModels.AttributeHistoryViewModel>()
            .Name("grid")
            .Columns(columns =>
            {

                columns.Bound(c => c.AttributeName);
                columns.Bound(c => c.UpdatedDate).Format("{0:dd/MM/yyyy HH:mm:ss}");   
            })
            .HtmlAttributes(new { @class = ".big-grid" })
            .Resizable(x => x.Columns(true))
            .Sortable()
            .Filterable()    
            .DataSource(dataSource => dataSource
                .Ajax()
                .Batch(true)
                .ServerOperation(false)
                        .Model(model =>
                        {
                            model.Id(c => c.Id);
                        })       
               .Read(read => read.Action("Read_AttributeHistory", "Attribute",  new { attributeId = attributeId })))
            )

【讨论】:

    【解决方案5】:

    我使用的选项如下:

    columns.Bound(p => p.OrderDate).Format("{0:d}").ClientTemplate("#=formatDate(OrderDate)#");
    
    function formatDate(OrderDate) {
        var formatedOrderDate = kendo.format("{0:d}", OrderDate);
    
        return formatedOrderDate;
    }
    

    【讨论】:

      【解决方案6】:

      据我所知,为了格式化日期值,您必须在 parameterMap 中处理它,

      $('#listDiv').kendoGrid({
                  dataSource: {
                      type: 'json',
                      serverPaging: true,
                      pageSize: 10,
                      transport: {
                          read: {
                              url: '@Url.Action("_ListMy", "Placement")',
                              data: refreshGridParams,
                              type: 'POST'
                          },
                          parameterMap: function (options, operation) {
                              if (operation != "read") {
                                  var d = new Date(options.StartDate);
                                  options.StartDate = kendo.toString(new Date(d), "dd/MM/yyyy");
                                  return options;
                              }
                              else { return options; }
      
                          }
                      },
                      schema: {
                          model: {
                              id: 'Id',
                              fields: {
                                  Id: { type: 'number' },
                                  StartDate: { type: 'date', format: 'dd/MM/yyyy' },
                                  Area: { type: 'string' },
                                  Length: { type: 'string' },
                                  Display: { type: 'string' },
                                  Status: { type: 'string' },
                                  Edit: { type: 'string' }
                              }
                          },
                          data: "Data",
                          total: "Count"
                      }
                  },
                  scrollable: false,
                  columns:
                      [
                          {
                              field: 'StartDate',
                              title: 'Start Date',
                              format: '{0:dd/MM/yyyy}',
                              width: 100
                          },
      

      如果你按照上面的例子,只是重命名像'StartDate'这样的对象,那么它应该可以工作(忽略'data:refreshGridParams')

      欲了解更多详情,请查看以下链接或搜索 kendo grid parameterMap 并查看其他人做了什么。

      http://docs.kendoui.com/api/framework/datasource#configuration-transport.parameterMap

      【讨论】:

      • 这仅将代码应用于“非读取操作”......有点愚蠢,因为它正在读取您要对其执行操作的数据,而且您正在将格式应用于传输而不是结果数据... 那么这有什么帮助呢?
      【解决方案7】:

      这可能会有所帮助:

      columns.Bound(date=> date.START_DATE).Title("Start Date").Format("{0:MM dd, yyyy}");
      

      【讨论】:

        猜你喜欢
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多