Подтвердить что ты не робот

Как исправить формат даты в ASP.NET BoundField (DataFormatString)?

У меня есть динамический BoundField (для элемента DetailsView) со следующим кодом:

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);

Но так или иначе, он все еще показывает неправильный формат: 2013-04-29T18: 15: 20.270.

В любом случае я мог бы исправить это, чтобы вместо этого показать "29/04/2013"? Благодарим за помощь.

4b9b3361

Ответ 1

Определите тип данных столбца источника данных, "CreateDate". Убедитесь, что он создает фактическое поле datetime, а не что-то вроде varchar. Если ваш источник данных является хранимой процедурой, вполне возможно, что CreateDate обрабатывается для создания varchar для форматирования даты, например:

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

Использование CONVERT, как это часто делается для того, чтобы результаты запроса удовлетворяли требованиям любого другого кода, который будет обрабатывать эти результаты. Стиль 126 - это стандарт ISO 8601, международный стандарт, который работает с любыми языковыми настройками. Я не знаю, что такое ваша индустрия, но это, вероятно, было преднамеренным. Вы не хотите возиться с ним. Этот стиль (126) создает строковое представление даты в форме "2013-04-29T18: 15: 20.270", как вы сообщили! Однако, если CreateDate был обработан таким образом, то вы не сможете получить свой bf1.DataFormatString, чтобы показать "29/04/2013". Сначала вы должны сначала начать с столбца типа datetime в исходном источнике данных SQL, чтобы bf1 правильно его потреблял. Поэтому просто добавьте его в запрос источника данных и назовите его другим именем, например CreateDate2, чтобы не беспокоить, какой другой код уже зависит от CreateDate, например:

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

Затем в вашем коде вам нужно будет привязать bf1 к "CreateDate2" вместо исходного "CreateDate", например:

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! Теперь ваша дата должна показать "29/04/2013"!

Ответ 3

Форматирование зависит от настройки культуры сервера. Если вы используете культуру en-US, вы можете использовать Short Date Pattern, например {0:d}

Например, он форматирует от 6/15/2009 1:45:30 до 6/15/2009

Вы можете проверить другие форматы из BoundField.DataFormatString

Ответ 4

У меня была такая же проблема, мне нужно было показывать только короткую дату (без времени), кроме того, нужно было иметь многоязычные настройки, поэтому зависит от языка: show dd-mm-yyyy или mm-dd-yyyy.

Наконец, используя DataFormatString="{0:d}, все работает отлично и отображает только дату с форматом культуры.

Ответ 5

Следующие ссылки помогут вам:

На странице дизайна клиентской стороны вы можете попробовать this: {0: G}

ИЛИ

Вы можете преобразовать этот формат datetime внутри самого запроса из базы данных:

Ответ 6

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

Ответ 7

очень просто добавьте это в связанное поле DataFormatString = "{0: yyyy/MM/dd}"