Форум: "Базы";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Вниз
Разное форматирование в одной колонке Найти похожие ветки
← →
Tlotr (2002-11-28 15:23) [0]Здравствуйте.
Вопрост такой: Есть два типа товаров, один измеряется в double числах (тонны), другой в целых (штуки). Можно ли как-то выпендриться, чтобы в DBGride (я пользуюсь EhLib) отображать эти данные в одной и той же колонке (идеально - с разным DisplayFormat: "##0 штук" и "###,##0.000 тонн" соответственно. )
Очень нежелательно делать две колонки, ведь одна из них всегда окажется пустой, а так как данные в гриде еще и редактируются (вводятся), то и рисованием не помочь. Нутром чую, что копать надо в OnCalcFields, только вот если я изменяю DisplayFormat, то он меняется для всей колонки. А как бы сделать DisplayFormat для конкретной строки ?
Заранее благодарен, Игорь.
← →
Prooksius (2002-11-28 15:29) [1]В калькулируемом поле (типа string) форматируешь строчку (из числа)
← →
Jeer (2002-11-28 15:29) [2]TField.OnGetText
← →
mike-d (2002-11-28 21:14) [3]Ты же как-то различаешь, где штуки, а где тонны?
Добавь колонку "единица измерения".
← →
Tlotr (2002-11-29 10:07) [4]2 mike-d:
На данном этапе так и сделал, но вообще-то,
Дело в том, что штуки должны редактироваться целыми числами, не отображая дробных нулей, а тонны - три знака после запятой.
2 Prooksius, Jeer:
Вы, видимо, имели ввиду одно и то же ? Tnx, попробую...
Спасибо.
← →
ЮЮ (2002-11-29 10:23) [5]Если это два разных столбца в физической таблице, то непосредственно в DBGride ты этого не сделаешь, т.к. стобец грида непосредственно связан с одним столбцом DataSeta.
Правильнее иметь одно целочисленное поле в таблице, а в гриде отображать его по разному. Но тогда и хранить надо будет не тонны, а килограммы
← →
Tlotr (2002-11-29 14:39) [6]2 ЮЮ: Интересная мысль... :) Значит, до 65 тонн ? ;)
Кстати, а calculated-поля я так понимаю, редактировать через грид как data нельзя, да ? %(
← →
ЮЮ (2002-11-30 08:37) [7]>Значит, до 65 тонн ? ;)
Нет, до 2147483,647 :-) Зато точно будешь знать, что если ввел
0,29 то и храниться и суммироваться будет 290, а не 0,289999999765 :-)
Так значит это всё-таки два разных поля в одной таблице, а реально используется одно? Не очень интересная мысль :-)))
← →
Tlotr (2002-12-01 04:43) [8]2 ЮЮ
два разных поля в одной таблице, а реально используется одно?
Подловил.... Не совсем. :)
Скажем так, это для весовых используется одно. А для штучных известен их табличный вес (в зависимости от формата) и вес заказа калькулируется от него.
Масса весового товара = введенному значению.
Масса штучного товара = введенному значению * табличную массу одной штуки (в зависимости от формата).
Т.о., хотя и есть некоторая избыточность, но она позволяет не джойнить несколько дополнительных таблиц при расчетах.
← →
maratFromTomsk (2002-12-02 12:34) [9]может быть в таблицу добавить поле типа DisplayName,
а в триггере его обрабатывать.
Редактирование данных, на мой взгляд, лучше вовсе делать в форме.
В этой форме можно показывать оба поля,
и в зависимости от типа разрешать редактировать требуемое поле.
можно еще поиграться форматом для поля
такие вещи я делал на фоксе
для каждого типа данных свой формат ...
в этом случае поле данных д.б. строкой
кроме этого для каждого типа данных можно
сделать валидацию данных,
при помещении данных в табицк обновлять требуемые поля
и т.п.
В своем проекте мы поступили так:
сделали класс - так называемые редакторы свойств
(наподобие Delphi PropEditor)
которые весь этот функционал обеспечивали.
Для каждого типа данных свой наследник от PropEditor
Ну и свой набор контролов,
для редактирования табличных данных используем наследник
от DrawGrid,
для паспорта свой контрол,
для адреса еще один,
для элемента справочника,
для документа
ну и т.д.
Это кстати удобно еще в том смысле что формы мало зависят от того как лежат данные
потом как мы не используем DataSet и их контролы
есть тут и плюсы и минусы
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c