Как отформатировать числовую строку в gridview?

В C#

У меня есть столбец данных о времени обработки в базе данных, который имеет формат «###» или «##» (например: «813» или «67»).

Когда я привязываю его к представлению сетки, я хотел отображать его в этом формате «0. ###» (например: «0,813» или «0,067»).

Я пробовал использовать {0: 0.000} и другие форматы. Но, похоже, ничего не работает. Может кто подскажет, как записать строку формата?

Старый вопрос, но я удивлен, что никто еще не предложил использовать спецификатор Custom ",", который можно использовать в качестве спецификатора масштабирования числа для достижения желаемого. См. Ответ ниже.

Joe 11.02.2012 13:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
26 863
7

Ответы 7

Вам необходимо отключить кодировку HTML в этом столбце, чтобы строка формата вступила в силу.

Дальнейшее чтение

Вы должны действительно умножить его на 0,001 перед отображением, тогда вы можете использовать обычную строку формата {0:0.000}.

Если по какой-то причине это невозможно - вы можете использовать строку формата {0:0\\.000}, в которой используется символ "." не как десятичный разделитель, а как буквальный.

Если по какой-то причине вы не можете изменить значение до того, как привяжете его к сетке, вы можете обработать событие RowDataBound и разделить число на 1000 перед его отображением.

// Handle the grid's RowDataBound event
MyGridView.RowDataBound += new GridViewRowEventHandler(MyGridView_RowDataBound);

// Set the value to x / 1000 in the RowDataBound event
protected void MyGridView_RowDataBound( object sender, GridViewRowEventArgs e )
{
    if ( e.Row.RowType != DataControlRowType.DataRow )
      return;

    // Cast e.Row.DataItem to whatever type you're binding to
    BindingObject bindingObject = (BindingObject)e.Row.DataItem;

    // Set the text of the correct column.  Replace 0 with the position of the correct column
    e.Row.Cells[0].Text = bindingObject.ProcessingTime / 1000M;
}

Разве вы не должны делить на 1000?

Kev 24.11.2008 21:41

Да, думаю, да. Думаю, меня не волновала эта конкретная часть.

Greg 24.11.2008 22:35

Так вы ищете что-то подобное?

String.Format("{0:0.000}", test/1000);

Ты имеешь ввиду?

GridView.DataSource = .... 

BoundField total = new BoundField();
total.DataField = "Total";
total.HeaderText = "Total Amount";
total.DataFormatString = "{0:C}";
donations.Columns.Add(total);

......

Хороший пост, это действительно помогло. Но лучше сделать так:

try
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (((DataRowView)(e.Row.DataItem))["Columnname"].ToString().Equals("Total", StringComparison.OrdinalIgnoreCase))
        {
            e.Row.Font.Bold = true;
            //-----or ant thing you want to do------
        }
    }
}
catch (Exception ex)
{

}

Это можно сделать с помощью пользовательский спецификатор ",", который можно использовать как спецификатор масштабирования числа:

Number scaling specifier: If one or more commas are specified immediately to the left of the explicit or implicit decimal point, the number to be formatted is divided by 1000 for each comma.

В вашем примере строку формата {0:0,.000} можно использовать для форматирования 813 как 0.813.

Две запятые будут масштабироваться на 1000000, например {0:0,,.0M} отформатирует 1753456 как 1.8M.

Другие вопросы по теме