使用Kendo Grid中的函数格式化日期类型

时间:2015-06-07 09:17:17

标签: kendo-ui kendo-grid kendo-asp.net-mvc

我有一个日期转换函数,它接受datetime参数并返回string。如何使用此函数格式化Kendo Grid中的Date列?

我已经尝试了以下代码,但没有一个工作

columns.Bound(x => x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)"#: ModifyDate #"));

columns.Bound(x => x.ModifyDate).Template(@<text>@Utility.GetPersianDate((DateTime)@item.ModifyDate)</text>);

columns.Bound(x => x.ModifyDate).Format(@Utility.GetPersianDate(Convert.ToDateTime("#: ModifyDate")));

我也尝试在服务器端转换它,但这是不可能的,因为格式化的日期不被识别为有效日期。这并不重要,因为它只是为了展示。用户不应该更改或输入该日期。如果无效,我可以考虑使用string代替DateTime并在服务器上进行转换。

2 个答案:

答案 0 :(得分:3)

您的代码不起作用的原因有多种。

columns.Bound(x => x.ModifyDate).ClientTemplate(@Utility.GetPersianDate((DateTime)"#: ModifyDate #"));

这不起作用,因为服务器代码首先运行,因此"#: ModifyDate #"无法转换为DateTime。它应该是InvalidOperationException或其他东西。

columns.Bound(x => x.ModifyDate).Template(@<text>@Utility.GetPersianDate((DateTime)@item.ModifyDate)</text>);`

由于奇怪的Template电话,第二行无效。它应该像这样调用:.Template(item => Utility.GetPersianDate(item.ModifyDate)) 除非你使用Ajax绑定,否则它将完成这项工作,在这种情况下你不能使用Template方法。

columns.Bound(x => x.ModifyDate).Format(@Utility.GetPersianDate(Convert.ToDateTime("#: ModifyDate")));`

第三行不起作用,因为Format应该被调用为Format("{0:D}"),并且它不能接受任何其他参数。

因此,如果您没有使用Ajax绑定,那么正确的Template调用应该可以解决问题。如果你这样做,那么你可以在服务器端转换它,或者编写一个Javascript函数将日期转换为波斯语并在ClientTemplate中调用它,如下所示:.ClientTemplate("# convertToPersian(ModifyDate) #")

我个人建议你在服务器端这样做:

public class SomeView
{
  public DateTime ModifyDate { get; set; }

  public string ModifyDatePersian { get { return Utility.GetPersianDate(ModifyDate); } }
}

并在客户端使用它,如下所示:.ClientTemplate("#: ModifyDatePersian) #")

答案 1 :(得分:1)

实际上,您可以使用Kendo自己的解析/格式功能,简而言之:

@(Html.Kendo().Grid(Model.dummyHistoryList)
                .Name("Grid")
                .Columns(columns =>
                {
                   columns.Bound(model => model.dueDate).ClientTemplate("#= kendo.toString(kendo.parseDate(dueDate),'dd MMM yyyy') #");
                   columns.Bound(model => model.DueItem);
                   columns.Bound(model => model.dueAmount).Format("{0:#,##0.00}").HtmlAttributes(new { style = "text-align:right" });
                })
                .Pageable()
                //and so on....
                )

覆盖JQuery验证:

<script type="text/javascript">
    jQuery(function ($) {
        $.validator.addMethod('date',
        function (value, element) {
            if (this.optional(element)) {
                return true;
            }

            var ok = true;
            //Here I use kendo parse to validate the format
            //you want or you can make your own/implement your
            //validation code below here. (Example)
            if ((kendo.parseDate(value, "dd/MM/yyyy")) == null){
                ok = false;
            }
            //END
            return ok;
        });
    });
</script>

将其他格式读取到KendoUI DatePicker。只需添加parseFormat:

.ParseFormats(new List<string> { "yyyy-MM-dd", "MM-dd-yyyy", "dd-MM-yyyy" })//So On...