web-dev-qa-db-fra.com

Format DateTime dans Kendo UI Grid en utilisant asp.net MVC Wrapper

Je veux construire une grille d'interface utilisateur Kendo avec le format date jj // MM/aaaa. Cependant, toutes les questions que j'ai trouvées à ce sujet ont été résolues avec le code Format ("{0: d}");. J'ai donc essayé comme un code ci-dessous:

GridBoundColumnBuilder<TModel> builder = par.Bound(field.Name);

        switch (field.Type.Type)
        {
            case CType.Boolean:
                builder = builder.ClientTemplate(string.Format("<input type='checkbox' #= {0} ? checked='checked' : '' # disabled='disabled' ></input>", field.Name));
                break;
            case CType.Datetime:
                builder = builder.Format("{0:d}");
                break;
            case CType.Decimal:
            case CType.Double:
                builder = builder.Format("{0:0.00}");
                break;
        }

Un autre format fonctionne très bien, juste DateTime ne fonctionne pas.

J'ai eu ce résultat pour Datetime =/Date (1377020142000) /

29
leodeoliveira

Si vous souhaitez afficher le format datetime dans la grille kendo, faites-le,

.Format("{0:dd/MM/yyyy}") 

Ou

builder.ToString("dd/MM/yyyy");
73
Jaimin
.Format("{0:" + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + "}");

Il peut y avoir d'autres options dans System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat qui pourraient fonctionner pour vous si ce n'est pas ce que vous voulez.

13
Bryan Hobbs

Les autres solutions étaient proches mais pas de cigare ... Voici ce qui a fonctionné pour moi:

columns.Bound(c => c.CreatedDate).ClientTemplate("#= kendo.toString(kendo.parseDate(CreatedDate), 'dd/MM/yyyy') #");
13
user1477388

Peut également utiliser:

columns.Bound(c => c.DateCreate).Format("{0:G}")

Comme dans http://docs.telerik.com/kendo-ui/framework/globalization/dateformatting

8
piris

Essayez plutôt ceci, cela fonctionnera.

.ClientTemplate("#= kendo.toString(kendo.parseDate(Date,'dd/MM/yyyy'), '" +  CurrentDateFormat + "') #");
4
Milan

Le problème principal est très bien documenté ici . En combinant les réponses là-bas avec d'autres trucs que j'ai trouvés, voici ce que je devais faire pour le faire fonctionner sur mon projet.

Dans le code C #:

.Template("#= kendo.toString(parseDate(" + field.Name + "), 'dd/MM/yyyy') #");

Ensuite, créez une fonction javascript:

function parseDate(d) {
  d = new Date(parseInt(d.replace(/\/Date\((-?\d+)\)\//gi, "$1"), 10));
  return d;
}

C'est un peu kluge, mais ça marche.

1
JebaDaHut

Je ne connais pas l'interface utilisateur de Kendo, mais il me semble que vous souhaitez passer une date au format chaîne plutôt qu'un objet DateTime.

La sortie /Date(...)/ ressemble à une date au format JSON de .Net.

Je convertirais la date en une chaîne en utilisant quelque chose comme myDateTime.ToString("dd/MM/yyyy"); avant de la passer au contrôle.

1
Void

Merci pour vos réponses:

Je formate une durée en secondes en HH: MM: SS dans une colonne de grille Kendo en utilisant un ClientTemplate et en appelant une fonction javascript:

                .ClientTemplate("#= secToHHMMSS(DurationInSeconds) # ")
                    .Title("Duration")
                    .Width(150);
function secToHHMMSS(s) {
    f = Math.floor;
    g = (n) => ('00' + n).slice(-2);
    return f(s / 3600) + ':' + g(f(s / 60) % 60) + ':' + g(s % 60)
}
0
Ephie