xFields: изменяемая структура таблицы | |
---|---|
Prudivus Автор Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Здравствуйте, господа и дамы (фокспрошники и фокспрошницы)!
Наконец-то дошли у меня руки сделать интересную для меня вещь, каковой и хочу поделиться. Если это уже было (а все уже когда-то было ;) ) - просьба ногами не пинать. Постановка задачи: есть некая базовая таблица с фиксированной структурой (для наглядности - Документы), к которой по необходимости, скажем в зависимости от типа записи (Тип Документа), нужно добавлять дополнительные поля. Причем необходимо иметь возможность делать это "на ходу", то есть в рантайме, у заказчика. Речь идет о неких дополнительных, малозначащих, необязательных, но тем не менее необходимых полях (реквизитах Документов). Например номер и дата доверенности для накладной и т.п. Решение: хранить дополнительные данные в текстовом поле в виде чего-то наподобие XML, предварительно описав для каждого Типа Документа свою схему данных и некоторые дополнительные атрибуты для каждого "расширенного поля". Эти "расширенные поля" могут выводиться в отдельный фрейм (контейнер), где они и будут выводиться и редактироваться. Дополнительные атрибуты будут такими: caption - пояснительная надпись к полю type - тип данных (string,char,varchar,integer,decimal,boolean и т.п.) по умолчанию - string controltype - тип контрола (editbox,textbox,checkbox,combobox,listbox...) по умолчанию определяется автоматически по типу default – значение по умолчанию по умолчанию определяется автоматически по типу, для дат - текущая length – длина поля в символах height – высота контрола в «строках» (24 пиксела) valid – проверка валидности – вызов скрипта… (очень опционально) Для контролов можно задавать дополнительные специфичные атрибуты как: Textbox.width combobox.RowSource и т.п. Теперь примеры. Схема 1: <двн caption="Номер доверенности" length="10"/> <двд caption="Дата выдачи" type="date"/> <двк caption="Кому выдана"/> Пример данных 1: <двн>2341116</двн> <двд>2006-12-14</двд> <двк> Иванов И.И.</двк> Если какое-либо поле не заполнено, то оно не записывается в хранилище. Схема 2: <пп caption="Пункт погрузки" default="Кишинев"/> <пр caption="Пункт разгрузки" default="Москва" controltype="combobox" combobox.RowSource="[Москва,Киев,Минск]" combobox.RowSourceType="1" /> Пример данных 2: <пр>Киев</пр > Ну а как это реализовано на практике можно посмотреть в прилагаемом зипе. Там есть пример ис valid'ом. |
© 2000-2024 Fox Club  |