Стили форматирования DataGridView

501
08 февраля 2017, 22:20

Есть DataGridView, который отображает коллекцию экземпляров SomeClass.

public class SomeClass
    {
        public float FloatValue { get; set; }
        public int Format { get; set; }
    }

Причем отображать нужно только свойство FloatValue, а после запятой показывать количество знаков, которое лежит в свойстве Format. Источником данных для DataGridView является BindingList. Для отображения FloatValue в конструкторе создана колонка DataGridViewTextBoxColumn, в качестве DataPropertyName указан FloatValue. Свойство Format может быть изменено в процессе исполнения программы.

Варианты, которыми я пытаюсь решить задачу:

1 вариант. Все работает как надо, но очень сильно тормозит, поэтому не могу использовать этот вариант.

private void dataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    SomeClass someClass = dataGridView.Rows[e.RowIndex].DataBoundItem as SomeClass;
    string limitFormat = "F" + someClass.Format.ToString();
    dataGridView.Columns["FloatValue"].DefaultCellStyle.Format = limitFormat;
}

2 вариант. При смене свойства Format выставляю флаг NeedFormat. В RowPrePaint при взведенном флаге произвожу форматирование и сбрасываю его. При первом отображении видно, что мелькают нужные значения, но потом нулевые дробные части сокращаются ("400" вместо "400,00").

Можно ли все же как-то разово изменить DefaultCellStyle.Format? Да и почему он вообще возвращается в другой формат?

READ ALSO
Где можно скачать готовый стиль и триггер для компонента MENU в WPF? [требует правки]

Где можно скачать готовый стиль и триггер для компонента MENU в WPF? [требует правки]

Добрый день! Подскажите, где можно скачать готовые стили для компонент WPF?

360
Класс-конструктор-как реализовать? [требует правки]

Класс-конструктор-как реализовать? [требует правки]

Есть несколько классов с параметрами, задача-один из них заменить или добавить класс-конструктор Задачка лёгкая, уровня начальной школы,...

290
'SplashScreen' does not contain a constructor that takes 1 arguments

'SplashScreen' does not contain a constructor that takes 1 arguments

Такая ошибка при попытке создать Splash заставкуПример был взять на MSDN

335