web-dev-qa-db-fra.com

Comment fixer le format de date dans ASP .NET BoundField (DataFormatString)?

J'ai un BoundField dynamique (pour un DetailsView) avec le code suivant:

BoundField bf1 = new BoundField();
bf1.DataField = "CreateDate";
bf1.DataFormatString = "{0:dd/MM/yyyy}";
bf1.HtmlEncode = false;
bf1.HeaderText = "Sample Header 2";

dv.Fields.Add(bf1);

Mais de toute façon, il affiche toujours le mauvais format: 2013-04-29T18: 15: 20.270.

Tout moyen que je pourrais résoudre ce problème pour qu'il affiche "29/04/2013" à la place? Merci de votre aide.

27
iceheaven31

Déterminez le type de données de votre colonne de source de données, "CreateDate". Assurez-vous qu'il génère un champ date/heure réel et non quelque chose comme un varchar. Si votre source de données est une procédure stockée, il est tout à fait possible que CreateDate soit en cours de traitement pour générer un varchar afin de formater la date, comme suit: 

SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate 
FROM TableName ...

L'utilisation de CONVERT comme ceci est souvent utilisée pour que les résultats de la requête remplissent les exigences de tout autre code qui traitera ces résultats. Le style 126 est au format ISO 8601, une norme internationale qui fonctionne avec n'importe quel paramètre de langue. Je ne sais pas ce que votre industrie est, mais c'était probablement intentionnel. Tu ne veux pas jouer avec ça. Ce style (126) génère une représentation sous forme de chaîne d'une date sous la forme "2013-04-29T18: 15: 20.270" exactement comme vous l'avez signalé! Toutefois, si CreateDate a été traité de cette manière, vous ne pourrez pas obtenir votre bf1.DataFormatString à la place "29/04/2013". Vous devez d’abord commencer par une colonne de type datetime dans votre source de données SQL d’origine pour que bf1 l’utilise correctement. Ajoutez-le simplement à la requête de source de données et appelez-le sous un nom différent, tel que CreateDate2, afin de ne pas perturber tout autre code dépendant déjà de CreateDate, comme ceci:

SELECT CONVERT(varchar,TableName.CreateDate,126) AS CreateDate, 
       TableName.CreateDate AS CreateDate2
FROM TableName ...

Ensuite, dans votre code, vous devrez lier bf1 à "CreateDate2" au lieu de "CreateDate" d'origine, comme suit:

BoundField bf1 = new BoundField();
bf1.DataField = "CreateDate2";
bf1.DataFormatString = "{0:dd/MM/yyyy}";
bf1.HtmlEncode = false;
bf1.HeaderText = "Sample Header 2";

dv.Fields.Add(bf1);

Voila! Votre date devrait maintenant afficher "29/04/2013" à la place!

7
ShieldOfSalvation

Vous pouvez ajouter l'attribut dataformatstring="{0:M-dd-yyyy} "au champ lié, comme ceci:

<asp:BoundField DataField="Date" HeaderText="Date" DataFormatString="{0:dd-M-yyyy}" />

source: formatage de l'heure datam à l'aide de dataformatstring

37
BornToCode

Le formatage dépend du paramètre de culture du serveur. Si vous utilisez la culture en-US, vous pouvez utiliser Modèle de date courte comme {0:d}

Par exemple, il formate 6/15/2009 1:45:30 à 6/15/2009

Vous pouvez vérifier plusieurs formats à partir de BoundField.DataFormatString

12
Soner Gönül

J'ai eu le même problème, seulement besoin d'afficher shortdate (sans le temps), en outre, il était nécessaire d'avoir des paramètres multilingues, donc dépend de la langue, show jj-mm-aaaa ou mm-jj-aaaa.

Enfin, avec DataFormatString="{0:d}, tout fonctionne bien et affiche uniquement la date avec le format de culture.

5
Lucas Orlando

très simple, ajoutez ceci à votre champ lié DataFormatString = "{0: aaaa/MM/jj}"

4
Mohammad
https://msdn.Microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 


In The above link you will find the answer

**C or c**

    Displays numeric values in currency format. You can specify the number of decimal places.
    Example:

Format: {0:C}
123.456 -> $123.46

**D or d**

    Displays integer values in decimal format. You can specify the number of digits. (Although the type is referred to as "decimal", the numbers are formatted as integers.)
    Example:
        Format: {0:D}
    1234 -> 1234
    Format: {0:D6}
    1234 -> 001234

    **E or e**
    Displays numeric values in scientific (exponential) format. You can specify the number of decimal places.
    Example:
    Format: {0:E}
    1052.0329112756 -> 1.052033E+003
    Format: {0:E2}
    -1052.0329112756 -> -1.05e+003

**F or f**
Displays numeric values in fixed format. You can specify the number of decimal places.
Example:
Format: {0:F}
1234.567 -> 1234.57
Format: {0:F3}
1234.567 -> 1234.567

**G or g**
Displays numeric values in general format (the most compact of either fixed-point or scientific notation). You can specify the number of significant digits.
Example:
Format: {0:G}
-123.456 -> -123.456
Format: {0:G2}
-123.456 -> -120

F or f
Displays numeric values in fixed format. You can specify the number of decimal places.
Format: {0:F}
1234.567 -> 1234.57
Format: {0:F3}
1234.567 -> 1234.567

G or g
Displays numeric values in general format (the most compact of either fixed-point or scientific notation). You can specify the number of significant digits.
Format: {0:G}
-123.456 -> -123.456
Format: {0:G2}
-123.456 -> -120

N or n
Displays numeric values in number format (including group separators and optional negative sign). You can specify the number of decimal places.
Format: {0:N}
1234.567 -> 1,234.57
Format: {0:N4}
1234.567 -> 1,234.5670

P or p
Displays numeric values in percent format. You can specify the number of decimal places.
Format: {0:P}
1 -> 100.00%
Format: {0:P1}
.5 -> 50.0%

R or r
Displays Single, Double, or BigInteger values in round-trip format.
Format: {0:R}
123456789.12345678 -> 123456789.12345678

X or x
Displays integer values in hexadecimal format. You can specify the number of digits.
Format: {0:X}
255 -> FF
Format: {0:x4}
255 -> 00ff
1
subramanya4

Les liens suivants vous aideront:

Dans la page de conception côté client, vous pouvez essayer this : {0: G}

OU

Vous pouvez convertir ce datetime format dans la requête elle-même à partir de la base de données:

1