2013-07-10 113 views
54

我有一个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}" 
     } 
    ] 
}); 

当我运行这个,我得到“2013-07-02T00:00:00Z”DOJ栏。为什么它没有格式化?任何想法?

+0

对不起Myzifer,仍然有问题。即使我尝试过模板:“#= kendo.toString(Date,'MM/dd/yyyy')#”也是。并试过这也http://onabai.wordpress.com/2012/09/28/kendoui-tips-and-tricks-on-dates-in-a-grid/但没有运气:( – jestges

+0

就我而言意识到关键组件是参数映射设置,没有,你将有更大的困难尝试设置它,你需要更多的细节parameterMap? – Myzifer

+0

是的,你可以提供更多的细节parameterMap – jestges

回答

102

我发现这条信息,并得到它才能正常工作。给我的数据是字符串格式,所以我需要使用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
+1

这样做的工作,但我会使用数据源上的解析功能,然后格式化如下所述,而不是这个,因为它感觉更干净:) – War

3

据我所知,以格式化,你必须处理它在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 
        }, 

如果你按照上面的例子,只是重命名,如“起始日期”对象,那么它应该工作(忽略'数据:refreshGridParams')

有关更多详细信息,请查看下面的链接或只是搜索kendo grid parameterMap,看看别人做了什么。

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

+0

这只适用于代码“非读取操作“...有点傻,因为它正在读取要执行操作的数据,但是您将格式应用于传输而不是结果数据...所以这有什么帮助? – War

10

尝试在剑道格格式化日期:

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

10这里假定MVC包装器是正在服务器上使用......同一个pl表明请求的人正在使用JS客户端脚本来构建网格,因此...没有帮助。 – War

+0

@Wardy,语法不同,格式字符串是一样的。明白了吗?仔细观察,真的很接近 – gurrawar

+0

你忽略了我的观点......如果我要求C#中某些东西的解决方案,并且你给了我一个C++答案,那么它就没有帮助......这是同样的概念。另外:Kendo在客户端上的行为与在服务器上的行为不一样(事实上,在客户端的一半时间内,它在两个不同的地方表现不一样)。 – War

4

我使用的选项如下:

columns.Bound(p => p.OrderDate).Format("{0:d}").ClientTemplate("#=formatDate(OrderDate)#"); 

function formatDate(OrderDate) { 
    var formatedOrderDate = kendo.format("{0:d}", OrderDate); 

    return formatedOrderDate; 
} 
34

只是需要把列的数据类型的数据源

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}" 
    } 
] 
+1

这不起作用 – War

+0

@Wardy在网格绑定到远程数据的例子表明它作品[链接](http://demos.telerik.com/kendo-ui/grid/remote-data-binding)。 – miguelug

+3

我使用最新版本做了几乎完全相同的事情,唯一的变化是网址,它显然没有工作。看来kendo需要以这种方式获取格式化日期对象才能工作,而odata结果并不总是返回js日期对象,所以为了实现这一点,您必须处理解析函数,如下所示:http:// onabai.wordpress.com/2012/09/28/kendoui-tips-and-tricks-on-dates-in-a-grid/ ...似乎是.Net的问题似乎在情况下以ISO格式返回数据就像使用带有OData的WebAPI返回结果一样。 – War

9

这是使用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 }))) 
      ) 
-1

这可能有帮助:

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