Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
 Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29

DBGrid два знака после запятой

26.02.2016, 18:10. Показов 6163. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, подскажите, пожалуйста, как сделать, чтобы в DBGrid выводилось в столбце "Цена за единицу" число и два знака после запятой. Про DataSet>DisplayFormat>'#.00' в курсе..но у меня в бд access уже вбиты числа, а при вводе вышеуказанной команды, проставляется то что в кавычках...Можно ли как то сделать чтоб числа из бд отображались и просто добавить два знака после запятой, или нужно снова данные вводить уже в Delphi?

P.S. если что то сверхглупое и примитивное спросила, извините, я периодически перекрашиваюсь в блонд, так что сделайте уж скидочку на умственные способности.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2016, 18:10
Ответы с готовыми решениями:

Очистка текущей ячейки DbGrid если в вводе после запятой значение больше 5
Как сделать в дбгрид очистка текущего ячейки если в вводе после запятой значение больше 5. Например: 55,?? После запятой не должно свыше...

Два знака после запятой
Столкнулся с такой проблемой может у кого было. Вообщем суть такова есть 3 поля (1 поле тип данных: decimal(18, 2) в SQL Server), (2 поле...

Как вывести два знака после запятой
Всем добрый вечер. Начал изучать c++ builder и не помогу понять как выводить два знака после запятой... P.S. Правильно ли я сделал...

20
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
26.02.2016, 19:55
В списке полей Датасета выбирается нужное и создается процедура-обработчик события OnGetText.
В этой процедуре возможно изменить формат отображения числа:
Delphi
1
2
3
4
procedure TForm1.ADOQuery1S2GetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  Text := Format('%7.2f', [DBGrid1.DataSource.DataSet.FieldByName('S2').AsFloat]);
end;
Здесь имя поля S2 для примера и вместо этого имени подставить нужное.

Добавлено через 8 минут
Да и свойство DisplayFormat, который относится не к Датасету в целом, а к конкретному полю тоже не стоит выбрасывать на помойку - работает нормально.
1
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
27.02.2016, 06:21
Цитата Сообщение от Oliynyk Посмотреть сообщение
DataSet>DisplayFormat>'#.00'
должно быть не Dataset а конкретное поле
1
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
22.03.2016, 11:01
Delphi
1
[quote="Скандербег;8806315"]Text := Format('%7.2f', [DBGrid1.DataSource.DataSet.FieldByName('S2').AsFloat]);[/quote]
А как сделать чтобы пустые значения оставались пустыми вместо 0.00?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
22.03.2016, 11:12
Delphi
1
2
3
4
5
6
7
procedure TForm1.ADOQuery1S2GetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  if DBGrid1.DataSource.DataSet.FieldByName('S2').AsFloat <> 0 then
    Text := Format('%7.2f', [DBGrid1.DataSource.DataSet.FieldByName('S2').AsFloat])
  else
    Text := '';
end;
2
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
22.03.2016, 11:38
Супер! Спс!
Только чего у грида значение поля спрашивать то? А если несколько гридов или вообще их нет, тогда как?
думаю можно будет короче
Delphi
1
 DataSet111.FieldByName('S2').AsFloat
проверил работает))
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
22.03.2016, 11:43
Цитата Сообщение от kavasaka Посмотреть сообщение
думаю можно будет короче
Delphi
1
Sender.AsFloat
1
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
22.03.2016, 11:48
Цитата Сообщение от kavasaka Посмотреть сообщение
можно будет короче
Короче, разумеется и спорить никто не собирается
Вот только бы народ давал себе труд указывать какие применяет компоненты.
А доступ к данным через датасет грида - это просто наиболее универсальный метод для демонстрации приемов.
Цитата Сообщение от kavasaka Посмотреть сообщение
А если несколько гридов или вообще их нет, тогда как?
Никак, потому что никаких данных тогда нет и спрашивать нечего и не у кого
По поводу нескольких гридов - так ведь указываем конкретно датасет какого грида используем (здесь для примера DBGrid1)
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
22.03.2016, 12:04
Цитата Сообщение от Скандербег Посмотреть сообщение
наиболее универсальный метод для демонстрации приемов.
Но на форуме ж постоянно твердят что Грид никакие данные не хранит, только отображает. Тогда чего за ними туда лазить, даже в обучающих целях? Для этого датасет есть - из него и брать.
Цитата Сообщение от northener Посмотреть сообщение
Sender.AsFloat
Это воопще супер - еще и заголовок процедуры на все Float поля всех датасетов этого модуля раскидать, чтобы не повторяться))
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
22.03.2016, 12:14
Цитата Сообщение от kavasaka Посмотреть сообщение
Тогда чего за ними туда лазить, даже в обучающих целях?
А где в приведенном примере видно, что за данными лезут в грид? Ничего похожего там нет. Повнимательнее присмотритесь и увидите тот же самый датасет, который хранит данные.

А доступ к данным в датсете через грид и буферный Datasource - это нормальная практика (редко применяемая, конечно, из-за длинной цепочки доступа).

К тому же, если бы вопрошающий четко и ясно указал какой датасет применяется, то именно он и был бы использован для примера.

Впрочем, чего тут дискутировать, все равно northener показал наиболее оптимальный вариант доступа к данным поля.
0
 Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29
30.03.2016, 01:04  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
К тому же, если бы вопрошающий четко и ясно указал какой датасет применяется, то именно он и был бы использован для примера.
Извините, что не отвечала, ноут залила нечаянно..
У меня пошло с кодом "Скандербег", ниже из моей версии приведен код
Delphi
1
2
3
4
5
procedure TDataModule1.bcdfldFindQueryDSDesigner6GetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  Text := Format('%7.2f', [TovaryForm.DBGrid2.DataSource.DataSet.FieldByName('Цена за единицу').AsFloat]);
end;
СПАСИБО БОЛЬШОЕ)))
0
30.03.2016, 01:43

Не по теме:

Цитата Сообщение от Oliynyk Посмотреть сообщение
ниже из моей версии приведен код
Цитата Сообщение от Oliynyk Посмотреть сообщение
bcdfldFindQueryDSDesigner6
Это ж надо придумать такое имя для компонента! :)

0
 Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29
30.03.2016, 01:51  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
DelphiВыделить код
1
Sender.AsFloat
А куда это вставлять?
если в OnGetText, то просто пустой столбец становится..

Добавлено через 2 минуты
Цитата Сообщение от northener Посмотреть сообщение
Это ж надо придумать такое имя для компонента!
Версия такая на залитом ноуте стоит..когда особо нет времени не меняю префикс компонентов..причем если запустить на другой день опять будет свои названия предлагать вновь установленным на форму компонентам..
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
30.03.2016, 02:00
Цитата Сообщение от Oliynyk Посмотреть сообщение
А куда это вставлять?
Раз у вас и так всё "пошло", то никуда пока ничего не надо вставлять.

Не по теме:

P.S. Ей-богу я не придумывал специально сей ответ!


0
 Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29
30.03.2016, 02:06  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Раз у вас всё "пошло", то никуда пока ничего не надо вставлять.
Пошло, чему я несказанно рада!!! Но у меня часто встречается в одной бд столбец с ценой или суммой, и в одной и той же, да и в разных тоже таблицах, пока прописала к каждому такому столбцу, но на будущее, не факт, что это негромостко смотрится..
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
30.03.2016, 02:09
Цитата Сообщение от Oliynyk Посмотреть сообщение
не факт, что это негромостко смотрится..
А что наш взгляд "громоздко смотрится"?
0
 Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29
30.03.2016, 02:16  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
А что наш взгляд "громоздко смотрится"?
количество процедур...
у меня их аж 10 вышло..
Да я и не спорю, что в проге Delphi даже в той, которая построена только на обращении к БД могут быть очень навороченные и длинные процедуры,а тут маленькие, в одну строчку, но всё равно хотелось узнать, нет ли возможности обобщить..а то 10 процедур конечно не много, а если будет ну не знаю, допустим, порядка 30, уже будет рябить в глазах..
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
30.03.2016, 08:22
Цитата Сообщение от northener Посмотреть сообщение
Sender.AsFloat
Тогда сделайте так вот ОДНУ процедуру, а потом в инспекторе повставляйте ее имя на все ваши 10 полей. Будет не громоздко.
0
 Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29
30.03.2016, 12:09  [ТС]
Цитата Сообщение от kavasaka Посмотреть сообщение
Тогда сделайте так вот ОДНУ процедуру, а потом в инспекторе повставляйте ее имя на все ваши 10 полей. Будет не громоздко.
Если несложно, можно чуть чуть поподробнеепрямо скажу в delphi делаю либо с учебником, либо по исходникам, либо по видео урокам...поэтому не совсем поняла..так скажем смысл поняла, а как выглядеть будет нет..
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
30.03.2016, 13:13
Ну например у вас на форме 25 кнопок и все должны делать одно и тоже действие.
Создаем 1 кнопку. на ее событие onClick в инспекторе двойной щелчек и пишем код.
Delphi
1
2
3
4
procedure TMainForm.BitBtn1Click(Sender: TObject);
begin
.... действие
end;
Дальше что? 25 раз этот код повторять? Не надо, просто создаем 25 кнопок и каждой в инспекторе в onClick пишем слово BitBtn1Click. Здесь будет аналогично. Или опять не понятно?

Добавлено через 7 минут
может не понятно написал, слово BitBtn1Click вставляем в инспекторе для каждой из 24 оставшихся кнопок.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2016, 13:13
Помогаю со студенческими работами здесь

Формат столбца datagridview - два знака после запятой
Имеется datagridview связанная с классом. В нем есть int переменная. Например нужно чтобы число 123 выглядело в таблице как 1,23, т.е...

Отформатировать число, оставив два знака после запятой
Вывожу текст таким образом: Имя.AddLine(Format('Номинальное тяговое усилие= {0}', x1)); где х1 переменная (действительное число) как...

Запретить вводить больше, чем два знака после запятой в TextBox
Нужно в событие keypress или textchanged добавить код запрещающий ввод более двух знаков после запятой.

Вывод в консоль чисел с плавающей точкой: как сделать, чтобы после запятой было только два знака?
как сделать что бы после запятой было только два знака? спасибо

Как сделать так чтобы в паскале после знака запятой оставалось только 4 знака?
Как сделать так чтобы в паскале после знака запятой оставалось только 4 знака? Например число 2,36739920726376 отображалось как 2,3673. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru