C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Универсальная форма редактирования записи
olegenty
Отправлено: 07.11.2006, 09:23


Ветеран

Группа: Модератор
Сообщений: 2412



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

в ней можно редактировать
1. Строки
2. Текст (многострочный)
3. Целые значения
4. Значения с плавающей точкой
5. Значения логического типа
6. Значения, выбираемые из списка
7. Путь к файлу
8. Дату
9. Время
10. Дату и время
11. Некие "собственные" типы со специфичным отображением и правилами редактирования

Может ещё какой тип не учёл? Кто писал универсальные редакторы — а что вы обычно редактируете?
gvg
Отправлено: 07.11.2006, 11:20


Машинист паровоза

Группа: Участник
Сообщений: 222



Давно использую подобную реализацию потомка CustomMaskEdit. У меня еще выбор/редактирование каталога.
olegenty
Отправлено: 07.11.2006, 11:25


Ветеран

Группа: Модератор
Сообщений: 2412



угу точно.

не, это не поле, это динамически строящаяся форма. например: на входе запись из какого-нибудь наследника TDataSet (хотя, это не обязательно), а на выходе — модальная форма редактирования этой записи.
AVC
Отправлено: 07.11.2006, 11:51


Ветеран

Группа: Модератор
Сообщений: 1583



У меня еще есть
выбор из произвольного запроса одной строки (пришлось повозиться с правилами для отображения)
выбор множества строк из произвольного запроса (возврат — список PK)

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

В тех местах, где выбирается не одно значение (выбор записи или строки из таблицы) движок автоматом меняет все одноименные значения редактируемой записи.

PS.
Естественно, что тексты запросов, списки значений и текстовые таблицы являются частью описания поля и хранятся снаружи программы (обычно на сервере БД). Перечень редактируемых полей и тип редактора для каждого поля там же

PPS.
Забыл. Из последних доработок. Сделал пару информационных полей (типа лабел).
Кнопки, которые умеют вызывать и исполнять скрипт с сервера бд.

PPPS
QUOTE
не, это не поле, это динамически строящаяся форма. например: на входе запись из какого-нибудь наследника TDataSet (хотя, это не обязательно), а на выходе — модальная форма редактирования этой записи.

Аналогично. Только не запись наследника DataSet а некая виртуальная запись, но в ней много общего с DataSet. На выходе true — все ок, false — пользователь нажал отменить и правильно заполнены поля виртуальной записи.
Подобная реализация редакторов полей есть и для использования прямо внутри DBGrid'а.
olegenty
Отправлено: 07.11.2006, 13:03


Ветеран

Группа: Модератор
Сообщений: 2412



да, работу с выбором из набора данных, получаемого запросом я туда тоже перенесу из другого/других мест (как раз — одной записи и группы записей). всё так. понятное дело, что пользуюсь также виртуальной записью своего собственного типа — CFields, который суть потомок от map < AnsiString, Variant>, точнее, конкретная специализация шаблона
CODE

template <class CKey, class CValue> class CFields: private map<CKey, CValue>
{
   ...
};
AVC
Отправлено: 07.11.2006, 13:35


Ветеран

Группа: Модератор
Сообщений: 1583



У меня древняя разработка. На базе TList'ов. Поле начиналось то же как набор пар name, value но быстро разрослось до... Да и одноименные поля у меня управляемо разрешены и иногда я этим пользуюсь.
olegenty
Отправлено: 07.11.2006, 14:23


Ветеран

Группа: Модератор
Сообщений: 2412



одноимённые поля разруливаются на уровне класса CTable, который суть специализация

CODE

template <class CFields> class CTable: private vector<CFields>
{
};


PS — вообще говоря это именно ты меня сподвиг всей этой хренью заниматься, до этого я писал намного хуже, хотя под рукой было всё, чтобы писать так.

P.P.S. и это постепенно превращается в стандарт моего подразделения. не очень резко — ядро рождается в муках, но тем не менее двое уже освоили и перешли на работу с моим модульным ядром. поэтому следующим шагом явилась тотальная универсализация. чуть позже всё, написанное моим подразделением, будет универсальным и легко сопровождаемым. надеюсь.
AVC
Отправлено: 07.11.2006, 14:55


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (olegenty @ 07.11.2006, 14:23)
будет универсальным и легко сопровождаемым. надеюсь.

Так и будет. А как легко вносить изменения типа новый отчет (выборка) или дополнительные условия выборки ... Я уже забыл когда по таким мелочам лазил в исходник — все в описаловке на сервере.
Еще одна, даже можно сказать основная, роль такой формы — заполнение параметров запроса, скрипта и т.д.
Кстати, из идей, help для таких универсальных форм это один из параметров описания и хранится рядом на сервере.
olegenty
Отправлено: 07.11.2006, 15:02


Ветеран

Группа: Модератор
Сообщений: 2412



Есс-но. Вот уже сейчас УЖАС — представляю, сколько времени уйдёт на документирование. smile.gif

Вернуться в Вопросы программирования в C++Builder