Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29

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

26.02.2016, 18:10. Показов 6274. Ответов 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
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 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
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
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
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
30.03.2016, 02:00
Цитата Сообщение от Oliynyk Посмотреть сообщение
А куда это вставлять?
Раз у вас и так всё "пошло", то никуда пока ничего не надо вставлять.

Не по теме:

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


0
 Аватар для Oliynyk
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 29
30.03.2016, 02:06  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Раз у вас всё "пошло", то никуда пока ничего не надо вставлять.
Пошло, чему я несказанно рада!!! Но у меня часто встречается в одной бд столбец с ценой или суммой, и в одной и той же, да и в разных тоже таблицах, пока прописала к каждому такому столбцу, но на будущее, не факт, что это негромостко смотрится..
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru