![]() |
#12 |
Moderator
|
Итак, что я посмотрел, как обстоит дело с динамическим добавлением контролов в таблицу.
Задача делится на две подзадачи: а) определение количества и типов столбцов (как я понимаю информация будет браться из FormDataSource) б) динамическое добавление этих столбцов в FormTableControl Как я понимаю, пункт а) не представляет большой сложности (хотя я могу и ошибаться), так что насчет пункта б): Вот я набросал одну формочку - на ней Table и две кнопки. При нажатии на одну из них в таблицу добавляется поле целого типа, при нажатии на другую - в таблицу добавляется поле типа Data. Естественно типов может быть и больше. Несколько замечаний: 1. В таблице в дизайнере необходимо первоначально создать хотя бы один контрол, иначе даже при добавлении контролов в run-time изменения не видны. Если ты знаешь как это побороть - скажи, я поправлю. 2. Так как невозможно создать массив объектов, приходится создавать эти объекты динамически, а для этого пришлось завести массив, в котором хранятся типы столбцов. Хотя тут можно будет реализовать и более удачную конструкцию типа контейнера или map'а. Далее насчет динамического перекрытия методов создаваемых контролов. Я там поэкспериментировал маленько: на форме есть метод createMessageHandler, в который мы передаем имя создаваемого метода и текст метода. Собственно сам createMessageHandler создает этот метод, который и будет обрабатывать требуемые события. Метод вызывается при добавлении в таблицу нового столбца, то есть нажатии на клавишу. Для реализации этого пришлось пойти на следующие допущения: 1. Ввести ситему именования создаваемых контролов (тип+номер столбца, например int2, date3), а следовательно и методов (int2_textChange) Недостаток этого подхода: при нажатии на клавишу - создается столбец в таблице, создается контрол в таблице, контрол привязывается к столбцу и даже создается обработчик для этого контрола. НО, чтобы этот обработчик заработал, надо открыть и закрыть форму. Именно поэтому, я и не стал писать код, удаляющий динамически созданный обработчик событий. Посмотри сам: открой в АОТ методы формы и запусти форму, понажимай на клавиши и увидишь, как в АОТ появляются методы. Но они пока не действуют. А теперь закрой форму, и снова запусти ее, НО не удаляя созданные методы. Теперь все работает. Хотя нет, написал и сам понял. Все нормально. Эти методы в форму у нас будет добавлять класс. Затем, и только затем, эта форма будет запускаться нашим классом, а по окончании ее работы, класс будет уничтожать созданные методы. В этом случае все будт работать. Но я еще не вижу все картины, поэтоиу не могу сказать, как делать лучше ![]() Что ты думаешь по этому поводу ? |
|
Теги |
table control |
|
![]() |
||||
Тема | Ответов | |||
FormTableControl и сортировка | 3 | |||
Основы работы с FormTableControl | 12 | |||
FormDataSource | 13 | |||
Различные типы связей (LinkType) для FormDataSource | 1 | |||
Собственный SQL запрос в FormDataSource | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|