Формат числа в DBGrid
Формат числа в DBGrid
У меня такая проблема. Есть поле формата NUMERIC(15,2), когда я его передаю в DBGrid, то он произвольно округляет это число, т.е. если запрос возвращает "6,10", то в гриде пишется "6,1", если "6,00", то просто "6". А мне нужно, чтобы формат был вида #,## ПОСТОЯННО. Как с этим бороться, подскажите пожалуйста
Причем тут региональные настройки... Если бы все было так просто, я бы не задавал такой вопрос. Или мне не верить своим глазам? Ситуацию я по -моему четко описал. одно моджет быть поможет решить проблему- это полея я перекачал IBPumpом из фокспрошной базы. В Эксперте все нормально, в нормальном формате все показывается, а в гриде че- то не хочет. Создаю новое поле такого формата - все нормально показывает....
Решение:
Вместо TDBGrid использовать TDBGridEh (версия 3.6 - бесплатна). В ней изменяешь у требуемого столбца свойство DisplayFormat:
Запятая - для разделения тысяч и миллионов пробелами.
2 Merlin и WildSery. У TField нет свойства DisplayFormat. А значит, речь идет чисто о настройке грида.
2 All. Здесь нет оффтопа. Раздел по визуальным компонентам. Кто считает, что сетка - не визуальный компонент , пусть бросит в меня камень.
Вместо TDBGrid использовать TDBGridEh (версия 3.6 - бесплатна). В ней изменяешь у требуемого столбца свойство DisplayFormat:
Код: Выделить всё
Column[N].DisplayFormat := ',0.00';
2 Merlin и WildSery. У TField нет свойства DisplayFormat. А значит, речь идет чисто о настройке грида.
2 All. Здесь нет оффтопа. Раздел по визуальным компонентам. Кто считает, что сетка - не визуальный компонент , пусть бросит в меня камень.
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Кладешь на форму ibquery потом по нему двойной тынц, открывается оконце, в нем правой кнопочкой тынц-add all fields потом тынц на нужное поле и в обжект инспекторе зрим свойство DisplayFormat, в него пишем 0.00 и телемаркет. И все визуальные компоненты опирающиеся на этот датасэт будут казать аки нужно.CyberMax писал(а):2 Merlin и WildSery. У TField нет свойства DisplayFormat. А значит, речь идет чисто о настройке грида.
Спасибо за DisplayFormat. Действительно, решило проблему.
Только не пойму почему так все яро кричали что это оффтоп , если тема ВИЗУАЛЬНЫЕ КОМПОНЕНТЫ + ДАННЫЕ.
Через IDE TIBQuery уже давно не заполнял, предпочитаю все формировать динамически . У TNumericField есть это свойство.Кладешь на форму ibquery потом по нему двойной тынц, открывается оконце, в нем правой кнопочкой тынц-add all fields потом тынц на нужное поле и в обжект инспекторе зрим свойство DisplayFormat, в него пишем 0.00 и телемаркет.
Только не пойму почему так все яро кричали что это оффтоп , если тема ВИЗУАЛЬНЫЕ КОМПОНЕНТЫ + ДАННЫЕ.
Да что ты прицепился к этому базовому классу? Конечно, там нет, нафига скажем строке или булевому полю этот DisplayFormat? Есть у TNumericField, который и является предком для всех числовых. Но это вопрошающий и сам понимать должен...CyberMax писал(а):Повторюсь, у базового класса TField нет DisplayFormat.
Прекрасный ответ!kdv писал(а):да потому оффтоп, что это тема для "1-го класса".
Я никогда не юзал TDBGridEh, и не знал про свойство DisplayFormat (ну просто не знал,никогда не сталкивался с такой проблемой). В нете покопал, в свойствах грида и Query полазил, ничего не нашел, решил спросить у профессионалов, коими вас считаю, нашел подходящий топик, получил в большинстве нормальные ответы, все получилось.Извините, что украл МИНУТУ вашего драгоценного времени.
Дмитрий, я с вами не соглашусь. Когда начинал работать с базами данных, у меня стояла точно такая же проблема. А под рукой была только справка по delphi. В итоге, не поняв, как решить эту проблему, плюнул на это дело. Вышеупомянутый DisplayFormat виден только у статических полей, про которые говорил Ivan_Pisarevsky. То есть до них еще добраться надо...kdv писал(а):да потому оффтоп, что это тема для "1-го класса".
В датасете через Fields и FieldByName работаешь непосредственно с TField. Поэтому без понятия, кто там для кого предок и потомок . За все время работы с БД лично мне практически ни разу не приходилось опускаться ниже TField. Не думаю, что один такой...WildSery писал(а):Есть у TNumericField, который и является предком для всех числовых. Но это вопрошающий и сам понимать должен...
Код: Выделить всё
if Table1.Fields[i].DataType in ([ftInteger,ftSmallint,ftLargeint,ftBytes,ftWord,ftFloat,ftCurrency]) then
(Table1.Fields[i] as TNumericField).DisplayFormat:='#0.00';
Серега, ну ты и извратился через перечисление дататайпов . Вот так же проще:
Конечно, "as" защищает от неверного приведения, но нам-то нужно проверить, что передали TNumericField. А уж что он там конкретно представляет собой - целое, дробное - неважно.
Код: Выделить всё
procedure FormatForMoney(Field: TField);
begin
if Field is TNumericField then
TNumericField(Fields).DisplayFormat := '#0.00'
else
raise Exception.Create('Field is not TNumericField');
end;