форматирование чисел в sourcegrid
От: AntiInt  
Дата: 14.01.11 15:25
Оценка:
Привет! Такая проблема: я хочу, чтобы в sourcegrid числа отображались с разделителем разрядов.
Я привожу число к нужному формату так:


NumberInfoFormat nfi = new CultureInfo("ru-RU",false).NumberFormat;
nfi.GroupSeparator = " "// пробел
myNumber.ToString("N",nfi);



потом число запихиваю в sourcegrid.Но в нем это уже строка, и когда пытаюсь воспользоваться кнопками сортировки в шапке таблицы, сортировка происходит как для строки.
Как мне обойти это?Но так, чтобы числа корректно сортировались и было нужное мне форматирование?
Пытался применять editors, не получилось
Заранее благодарен!
Re: форматирование чисел в sourcegrid
От: Аноним  
Дата: 17.01.11 06:33
Оценка:
Здравствуйте, AntiInt!

Нужно создать свой класс от базового FormatViewCell и назначить объект его типа свойству View конкретной ячейки:


    /// <summary>
    /// Форматирования отображения ячейки (типа Int32) грида
    /// </summary>
    internal class IntFormatViewCell : FormatViewCell
    {
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="format">Формат содержимого ячейки</param>
        public IntFormatViewCell(string format)
            : base(format)
        {
        }

        /// <summary>
        /// Форматирование содержимого ячейки в соответствии с форматом
        /// </summary>
        /// <param name="context"></param>
        protected override void PrepareVisualElementText(SourceGrid.CellContext context)
        {
            base.PrepareVisualElementText(context);

            if (context.Value != null)
            {
                int res;

                if (Int32.TryParse(context.Value.ToString(), out res))
                {
                    this.ElementText.Value = res.ToString(format);
                }
            }
        }
    }



//...

private readonly FormatViewCell viewCountRegularCenter = new IntFormatViewCell("#,##0");

//...


viewCountRegularCenter.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;

//...

this[row, 4].View = viewCountRegularCenter;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.