Kendo-Raster-Datumsspalte nicht formatiert


69

Ich habe KendoGridunten ein "Gefällt mir" und wenn ich die Anwendung ausführe, erhalte ich nicht das erwartete Format für die dateSpalte.

$("#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}" 
        }
    ]
});

Wenn ich dies ausführe, erhalte ich " 2013-07-02T00:00:00Z" in der DOJ-Spalte. Warum wird nicht formatiert? Irgendeine Idee?


Entschuldigung Myzifer, immer noch ein Problem. Sogar ich habe versucht, wie Vorlage: "# = kendo.toString (Datum, 'MM / TT / JJJJ') #" auch. Und versuchte dies auch onabai.wordpress.com/2012/09/28/… Aber kein Glück :(
jestges

Soweit mir bekannt ist, ist die Schlüsselkomponente das parameterMap-Setup. Wenn Sie keine größeren Schwierigkeiten haben, es einzurichten, benötigen Sie weitere Details zur parameterMap?
Myzifer

Ja, können Sie weitere Details zu parameterMap
jestges

Sorry Myzifer ... Ich habe es genauso versucht, aber irgendwie ist es fehlgeschlagen :(
jestges

Was hat es angezeigt und können Sie meinen Code verknüpfen, damit ich sehen kann, ob ich etwas falsches erkennen kann, da es manchmal ein zusätzliches Zeichen oder die kleinste Sache sein kann, die es bricht.
Myzifer

Antworten:


122

Ich habe diese Information gefunden und sie richtig funktionieren lassen. Die mir gegebenen Daten waren im Zeichenfolgenformat, daher musste ich die Zeichenfolge kendo.parseDatevor dem Formatieren mit analysieren 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') #"
    },
...


Verweise:

  1. Format-Datum im Raster
  2. jsfiddle
  3. Kendo UI Datumsformatierung

1
Dies funktioniert, aber ich würde eine Analysefunktion für die Datenquelle verwenden und dann wie unten beschrieben formatieren, da dies sich sauberer anfühlt :)
War

42

Sie müssen nur den Datentyp der Spalte in die Datenquelle einfügen

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

und dann Ihre Anweisungsspalte:

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

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

3
Ich habe mit der neuesten Version so ziemlich dasselbe gemacht, mit der einzigen Änderung, dass die URL und es offensichtlich nicht funktioniert hat. Es scheint, dass Kendo ein Datumsobjekt für die Formatierung auf diese Weise zum Laufen bringen muss und Odata-Ergebnisse nicht immer ein js-Datumsobjekt zurückgeben. Damit dies funktioniert, müssen Sie die Analysefunktion wie hier gezeigt ausführen : onabai.wordpress. com / 2012/09/28 /… ... das Problem scheint zu sein, dass .Net in Situationen wie der Verwendung von WebAPI mit OData zur Rückgabe der Ergebnisse Daten im ISO-Format zurückzugeben scheint.
Krieg

2
Mit anderen Worten "dies funktioniert abhängig vom Format Ihrer OData-Datumszeichenfolge", aber dies ist eine Annahme, auf die diese Antwort keinen Verweis enthält.
Krieg

1
Das war die richtige Antwort für mich. Es gab eine falsch platzierte schließende Klammer, so dass das Schema nicht berücksichtigt wurde und meine erste Lösung war, was aholtry gepostet hat. Ohne das Schema und ohne Formatierung würde das Datum als in der Frage erwähnte Scherze angezeigt (2013-07-02T00: 00: 00Z). Aber als ich die Klammern reparierte, wurde das Datum vollständig ausführlich angezeigt (Fr 01 Jan 2016 00:00:00 GMT-0800 (Pacific Standard Time)), und zu diesem Zeitpunkt begann das formatAttribut zu funktionieren und ich konnte das loswerden doppelte Umwandlung der akzeptierten Antwort.
Andrew

1
Dies ist der saubere und richtige Weg, dies zu tun. 1.
Deklarieren Sie den Spaltentyp

1
Dies hat bei mir funktioniert, obwohl ich type: "Date"auf dem Feld dieses Attribut aus den Spalteneigenschaften entfernt habe.
Andy G

10

Formatieren Sie das Datum im Kendo-Raster wie folgt:

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

2
Dies setzt voraus, dass der MVC-Wrapper auf dem Server verwendet wird. Samepl schlägt vor, dass die fragende Person ein JS-Client-Skript verwendet, um das Grid zu erstellen. Dies ist also nicht hilfreich.
Krieg

@Wardy, die Syntax ist unterschiedlich, die Formatzeichenfolge ist dieselbe. verstanden? schau genau hin, ganz genau
Gurrawar

Sie ignorieren meinen Standpunkt ... Wenn ich nach einer Lösung für etwas in C # gefragt habe und Sie mir eine C ++ - Antwort gegeben haben, ist dies nicht hilfreich ... dies ist das gleiche Konzept. Außerdem: Kendo verhält sich auf dem Client nicht immer gleich wie auf dem Server (tatsächlich verhält es sich die Hälfte der Zeit an zwei verschiedenen Stellen auf dem Client nicht gleich).
Krieg

10

So machen Sie es mit 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 })))
            )

6

Die Option, die ich benutze, ist wie folgt:

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

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

    return formatedOrderDate;
}

3

Soweit mir bekannt ist, müssen Sie einen Datumswert in parameterMap verarbeiten, um ihn zu formatieren.

$('#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
                    },

Wenn Sie dem obigen Beispiel folgen und nur Objekte wie 'StartDate' umbenennen, sollte es funktionieren (ignorieren Sie 'data: refreshGridParams').

Weitere Details finden Sie unter dem folgenden Link oder suchen Sie einfach nach kendo grid parameterMap und sehen Sie, was andere getan haben.

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


Dies wendet den Code nur auf "nicht gelesene Operationen" an ... ein bisschen dumm, da er die Daten liest, für die Sie die Operation ausführen möchten, aber Sie wenden auch das Format auf den Transport an, nicht die resultierenden Daten ... wie hilft das? ?
Krieg

0

Dies könnte hilfreich sein:

columns.Bound(date=> date.START_DATE).Title("Start Date").Format("{0:MM dd, yyyy}");
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.