Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разное форматирование в одной колонке [D6, IB6.x]


Tlotr ©   (2002-11-28 15:23:00) 

Здравствуйте.
Вопрост такой: Есть два типа товаров, один измеряется в double числах (тонны), другой в целых (штуки). Можно ли как-то выпендриться, чтобы в DBGride (я пользуюсь EhLib) отображать эти данные в одной и той же колонке (идеально - с разным DisplayFormat: "##0 штук" и "###,##0.000 тонн" соответственно. )

Очень нежелательно делать две колонки, ведь одна из них всегда окажется пустой, а так как данные в гриде еще и редактируются (вводятся), то и рисованием не помочь. Нутром чую, что копать надо в OnCalcFields, только вот если я изменяю DisplayFormat, то он меняется для всей колонки. А как бы сделать DisplayFormat для конкретной строки ?

Заранее благодарен, Игорь.


maratFromTomsk   (2002-12-02 12:34:00) [1]

может быть в таблицу добавить поле типа DisplayName,
а в триггере его обрабатывать.
Редактирование данных, на мой взгляд, лучше вовсе делать в форме.
В этой форме можно показывать оба поля,
и в зависимости от типа разрешать редактировать требуемое поле.

можно еще поиграться форматом для поля
такие вещи я делал на фоксе
для каждого типа данных свой формат ...
в этом случае поле данных д.б. строкой

кроме этого для каждого типа данных можно
сделать валидацию данных,
при помещении данных в табицк обновлять требуемые поля
и т.п.

В своем проекте мы поступили так:
сделали класс - так называемые редакторы свойств
(наподобие Delphi PropEditor)
которые весь этот функционал обеспечивали.
Для каждого типа данных свой наследник от PropEditor

Ну и свой набор контролов,
для редактирования табличных данных используем наследник
от DrawGrid,
для паспорта свой контрол,
для адреса еще один,
для элемента справочника,
для документа
ну и т.д.

Это кстати удобно еще в том смысле что формы мало зависят от того как лежат данные
потом как мы не используем DataSet и их контролы
есть тут и плюсы и минусы


Tlotr   (2002-12-01 04:43:00) [2]

2 ЮЮ
два разных поля в одной таблице, а реально используется одно?
Подловил.... Не совсем. :)
Скажем так, это для весовых используется одно. А для штучных известен их табличный вес (в зависимости от формата) и вес заказа калькулируется от него.

Масса весового товара = введенному значению.
Масса штучного товара = введенному значению * табличную массу одной штуки (в зависимости от формата).

Т.о., хотя и есть некоторая избыточность, но она позволяет не джойнить несколько дополнительных таблиц при расчетах.


ЮЮ   (2002-11-30 08:37:00) [3]

>Значит, до 65 тонн ? ;)
Нет, до 2147483,647 :-) Зато точно будешь знать, что если ввел
0,29 то и храниться и суммироваться будет 290, а не 0,289999999765 :-)

Так значит это всё-таки два разных поля в одной таблице, а реально используется одно? Не очень интересная мысль :-)))


Tlotr   (2002-11-29 14:39:00) [4]

2 ЮЮ: Интересная мысль... :) Значит, до 65 тонн ? ;)

Кстати, а calculated-поля я так понимаю, редактировать через грид как data нельзя, да ? %(


ЮЮ   (2002-11-29 10:23:00) [5]

Если это два разных столбца в физической таблице, то непосредственно в DBGride ты этого не сделаешь, т.к. стобец грида непосредственно связан с одним столбцом DataSeta.
Правильнее иметь одно целочисленное поле в таблице, а в гриде отображать его по разному. Но тогда и хранить надо будет не тонны, а килограммы


Tlotr   (2002-11-29 10:07:00) [6]

2 mike-d:
На данном этапе так и сделал, но вообще-то,
Дело в том, что штуки должны редактироваться целыми числами, не отображая дробных нулей, а тонны - три знака после запятой.

2 Prooksius, Jeer:
Вы, видимо, имели ввиду одно и то же ? Tnx, попробую...

Спасибо.


mike-d   (2002-11-28 21:14:00) [7]

Ты же как-то различаешь, где штуки, а где тонны?
Добавь колонку "единица измерения".


Prooksius   (2002-11-28 15:29:00) [8]

В калькулируемом поле (типа string) форматируешь строчку (из числа)


Jeer   (2002-11-28 15:29:00) [9]

TField.OnGetText


Наверх

Титульная страница Поиск, карта сайта Написать письмо