В C#
У меня есть столбец данных о времени обработки в базе данных, который имеет формат «###» или «##» (например: «813» или «67»).
Когда я привязываю его к представлению сетки, я хотел отображать его в этом формате «0. ###» (например: «0,813» или «0,067»).
Я пробовал использовать {0: 0.000} и другие форматы. Но, похоже, ничего не работает. Может кто подскажет, как записать строку формата?





Вам необходимо отключить кодировку 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?
Да, думаю, да. Думаю, меня не волновала эта конкретная часть.
Так вы ищете что-то подобное?
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.
Старый вопрос, но я удивлен, что никто еще не предложил использовать спецификатор Custom ",", который можно использовать в качестве спецификатора масштабирования числа для достижения желаемого. См. Ответ ниже.