![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Как реализовать подобный сценарий, а может он реализован уже:
Есть куча справочников, какие посложнее, какие попроще. Для разных справочников есть разные формы где можно делать создание/удаление/изменение элементов справочника. Есть форма, на которой пользователь выбирает элементы этих справочников. Пользователь может открыть форму выбора для справочника, или форму редактирования справочника. На форме может быть много полей для заполнения из справочников. Вопрос, как сделать универсальный контрол который бы работал как фронт-енд для справочника - показывал бы текущий выбранный элемент, запускал бы форму выбора элемента, запускал бы форму редактирования справочника? Хм, написал вот, и понял, что написал все то что уже работает в 1С 8.0 ))) Ну в общем да, именно это и нужно. Интересует не именно как сделать контрол, а какой подход лучше использовать. Чем лучше пользоваться чтобы собрать такую штуку? Может кто знает где можно глянуть подобные наработки? |
|||
|
||||
Conkistador |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.6.2009 Репутация: 2 Всего: 2 |
Возможно Вам подойдет какая нибудь ORM система типа NHibernate, но это немного не то всетаки. По поводу опыта, реализовывали мы подобную задумку для простых справочников из 2 -5 полей. Организованно было на MS SQL через получение данных из системных таблиц о количестве полей в произвольной таблице и о ключевых полях... Все работало но любая универсализация это дополнительная головная боль, так что рекомендую подумать еще несколько раз "а оно вам надо" ![]() |
|||
|
||||
dazy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Ну в качестве ОРМ - EF подойдет. Тут вопрос в другом, не как хранить данные, а как их обрабатывать. Как сказать контролу, что если к нему подключен ДатаКонтекст, ну к примеру "Банки", то чтобы контрол мог вызвать форму заполнения/выбора банков. А в следующем экземпляре того же контрола ДатаКонтекст уже "Валюты", и контрол для редактирования/выбора вызывает форму предназначенную для валют. Подозреваю, что тут нужно грамотно интерфейс нарисовать и пристыковать через него к каждому классу сущности - формы для редактирования. Т.е. еще надо хранить информацию, к какому классу какая форма относится. Только ясности в этом вопросе у меня нет.
Да интересно просто! |
||||
|
|||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
ORM, действительно, придется очень кстати. К тому же я бы посоветовал использовать один статический контекст, чтобы избавить себя от проблем с Attach/Detach и, как следствие, с добавлением, удалением и обновлением элементов.
|
|||
|
||||
Conkistador |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.6.2009 Репутация: 2 Всего: 2 |
Хранить информацию о связанных формах можно прямо в БД а создавать их через Reflection |
|||
|
||||
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Т.е. можно написать что то вроде ShowFormByMagic("MySuperForm"); и MySuperForm стартанет? И это называется рефлекшн, я правильно понял? Или же лучше в классе сущности хранить тип формы для редактированя, и запускать ее "обычным" образом? |
|||
|
||||
SaS1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2005 Репутация: нет Всего: нет |
dazy,
У нас на проекте судя по всему реализовано то, что вам нужно. Для каждого Справочника мы формы отдельные не делали. Форма одна, но хитрая - она смотрит на класс объекта, который нужно отобразить или редактировать или добавить и если видит там строковое поле - добавляет текст бокс, для булевского - чек бокс, для енума - комбик и т.д. для какого-нибудь класса - типо лукап. Ты получается эти поля заполняешь или едитишь, жмякаешь сохранить и оно у нас сохраняет специально написанным фреймворком, используя мэпинг на базу (когда начинали писать - Hibernate ещё не было:( ща переходим на него.) Но реально проект у нас ОЧЕНЬ большой и поэтому написание такой хитрой формы оправдано хоть и гемороя с ней много, а для небольшого проекта это неоправданно тяжело пишется :( |
|||
|
||||
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
SaS1,
Т.е. у вас для выбора/редактирования все же разные формы? Или вообще одна, просто работает в разных режимах? |
|||
|
||||
Conkistador |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.6.2009 Репутация: 2 Всего: 2 |
ну я бы сказал вот это называется созданием класса по названию через рефлексию:
Добавлено через 9 минут и 53 секунды dazy, я бы одратил больше вимания на эту фразу ![]() Вот смотрите в теории Вам наверное хочется что бы отдав кому то (контрол,форма ...) таблицу или класс построенный на основании таблицы, Вы получили бы набор полей с определенным поведением, а потом что бы этот элемент управления сумел еще и правильно распознать как сохранить измененные данные. Для этого необходимо 1. Каким то образом найти ключевые поля таблицы (например из системных таблиц) 2. Отобразить различные элементы управления (textbox и т.д.) и связать их с соответствующими полями 3. Правильно сохранить изменения все еще интересно ;) |
||||
|
|||||
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
С этим, как раз, проблем нет. Я в основном упираюсь в сильверлайт, а там есть замечательная штука - RIA services. Делает практически тоже самое что вы и описали, как говорится out of the box. Отдаешь сущность, и говоришь, а построй мне форму по вот этой сущности - она строит, и валидацию прописывает, и описания показывает, определяет поля обязательные для заполнения и т.д. Но дело не в этом, речь не о том, чтобы форму построить. Сам я не очень доверяю автогенераторным формам. Речь о том, чтобы для каждой сущности запускать свою собственную форму редактирования. Т.е. у контрола есть кнопка "править" нажимаем на нее, и запускается форма для редактирования той сущности которая связана с этим конролом. А уж будет эта форма вручную написана или сгенерированая автоматом, это дело десятое. |
|||
|
||||
Conkistador |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 3.6.2009 Репутация: 2 Всего: 2 |
я же привел вверху пример как можно создать класс по названию, что Вам мешает связать с вашими сущностями строки типа "MyProg.Form1" а потом создав по названию класса экземпляр, вызвать метод Show() ? |
|||
|
||||
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Да я понял, буду разбираться, спасибо. Я так просто, ворчу для поддержания беседы ))) |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |