2013-05-06 4 views
0

Я хотел бы условно изменить свойство FormatString столбца сетки.Devexpress Double условный FormatString

Вход двойной.

То, что я хочу сделать, это следующее:

if (cellValue % 1 == 0) 
    aColumn.DisplayFormat.FormatString = "N0"; 
else 
    aColumn.DisplayFormat.FormatString = "N2"; 

Есть ли способ сделать это во время выполнения без необходимости проверять каждое значение столбца?

Любая помощь будет оценена, спасибо!

ответ

1

Вы можете использовать подход witn для обработки события ColumnView.CustomColumnDisplayText, продемонстрированного @kenrogers.

Или вы можете использовать Custom Formatting функцию для этой колонки:

aColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Custom; 
aColumn.DisplayFormat.Format = new CustomDoubleFormatter(); 

public class CustomDoubleFormatter : IFormatProvider, ICustomFormatter { 
    public object GetFormat(Type format) { 
     return this; 
    } 
    public string Format(string format, object arg, IFormatProvider provider) { 
     bool hasFractionalPart = ((double)arg % 1.0 > double.Epsilon); 
     return string.Format(hasFractionalPart ? "{0:N2}" : "{0:N0}", arg); 
    } 
} 

P.S. Для получения более подробной информации о форматировании значений ячеек см. Статью справки .

+0

Это прекрасно работает, спасибо. Я предпочитаю этот подход вместо проверки значений в «время отображения». Это определенно быстрее и стабильнее. Еще раз спасибо Димитрий! – Fares

1

Насколько мне известно, нет, нет.

Фактически, то, что вы написали, изменит FormatString для всего столбца, а не одну ячейку, которая не то, что вы хотите.

То, что я думаю, вам следует сделать, это обработать событие GridView CustomColumnDisplayText. Ваш обработчик будет выглядеть примерно так:

void gridView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e) 
{ 
    if (e.Column.FieldName == "YourFieldName") 
    { 
     float value = Convert.ToDouble(e.Value); 
     if (value % 1 == 0) 
      e.DisplayText = string.Format("{0:N0}", value); 
     else 
      e.DisplayText = string.Format("{0:N2}", value); 
    } 
{ 

Обратите внимание, что если вы определили свои собственные колонки для GridView, вы можете изменить первое условное выражение в обработчик событий для if (e.Column == myColumn), который должен быть более эффективным.

+0

Спасибо за ваш ответ @kenrogers. Но я предпочитаю подход, предложенный Димитрием, который, кажется, быстрее во время выполнения. Спасибо! – Fares

Смежные вопросы