Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Справочники, Комплексная работа со справочниками 
:(
    Опции темы
dazy
Дата 25.6.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 1
Всего: 8



Как реализовать подобный сценарий, а может он реализован уже:

Есть куча справочников, какие посложнее, какие попроще.
Для разных справочников есть разные формы где можно делать создание/удаление/изменение элементов справочника.

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

Вопрос, как сделать универсальный контрол который бы работал как фронт-енд для справочника - показывал бы текущий выбранный элемент, запускал бы форму выбора элемента, запускал бы форму редактирования справочника?

Хм, написал вот, и понял, что написал все то что уже работает в 1С 8.0 ))) Ну в общем да, именно это и нужно. Интересует не именно как сделать контрол,  а какой подход лучше использовать. Чем лучше пользоваться чтобы собрать такую штуку? Может кто знает где можно глянуть подобные наработки?

PM MAIL   Вверх
Conkistador
Дата 26.6.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 3.6.2009

Репутация: 2
Всего: 2



Цитата(dazy @ 25.6.2009,  20:46)
Как реализовать подобный сценарий, а может он реализован уже:

Есть куча справочников, какие посложнее, какие попроще.
Для разных справочников есть разные формы где можно делать создание/удаление/изменение элементов справочника.

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

Вопрос, как сделать универсальный контрол который бы работал как фронт-енд для справочника - показывал бы текущий выбранный элемент, запускал бы форму выбора элемента, запускал бы форму редактирования справочника?

Хм, написал вот, и понял, что написал все то что уже работает в 1С 8.0 ))) Ну в общем да, именно это и нужно. Интересует не именно как сделать контрол,  а какой подход лучше использовать. Чем лучше пользоваться чтобы собрать такую штуку? Может кто знает где можно глянуть подобные наработки?

Возможно Вам подойдет какая нибудь ORM система типа NHibernate, но это немного не то всетаки.
По поводу опыта, реализовывали мы подобную задумку для простых справочников из 2 -5 полей. Организованно было на MS SQL через получение данных из системных таблиц о количестве полей в произвольной таблице и о ключевых полях... Все работало но любая универсализация это дополнительная головная боль, так что рекомендую подумать еще несколько раз "а оно вам надо" smile 
PM MAIL WWW   Вверх
dazy
Дата 26.6.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 1
Всего: 8



Цитата

Возможно Вам подойдет какая нибудь ORM система типа NHibernate, но это немного не то всетаки.
По поводу опыта, реализовывали мы подобную задумку для простых справочников из 2 -5 полей. Организованно было на MS SQL через получение данных из системных таблиц о количестве полей в произвольной таблице и о ключевых полях... Все работало но любая универсализация это дополнительная головная боль, так что рекомендую подумать еще несколько раз "а оно вам надо"   


Ну в качестве ОРМ -  EF подойдет.

Тут вопрос в другом, не как хранить данные, а как их обрабатывать.

Как сказать контролу, что если к нему подключен ДатаКонтекст, ну к примеру "Банки", то чтобы контрол мог вызвать форму заполнения/выбора банков. А в следующем экземпляре того же контрола ДатаКонтекст уже "Валюты", и контрол для редактирования/выбора вызывает форму предназначенную для валют.

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


Цитата

 "а оно вам надо"  

Да интересно просто!
PM MAIL   Вверх
Idsa
Дата 26.6.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



ORM, действительно, придется очень кстати. К тому же я бы посоветовал использовать один статический контекст, чтобы избавить себя от проблем с Attach/Detach и, как следствие, с добавлением, удалением и обновлением элементов.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Conkistador
Дата 26.6.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 3.6.2009

Репутация: 2
Всего: 2



Цитата(dazy @  26.6.2009,  10:49 Найти цитируемый пост)
Подозреваю, что тут нужно грамотно интерфейс нарисовать и пристыковать через него к каждому классу сущности - формы для редактирования.  Т.е. еще надо хранить информацию, к какому классу какая форма относится.  Только ясности в этом вопросе у меня нет.


Хранить информацию о связанных формах можно прямо в БД а создавать их через Reflection
PM MAIL WWW   Вверх
dazy
Дата 26.6.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 1
Всего: 8



Цитата

Хранить информацию о связанных формах можно прямо в БД а создавать их через Reflection 


Т.е. можно написать что то вроде ShowFormByMagic("MySuperForm"); и MySuperForm стартанет? И это называется рефлекшн, я правильно понял?


Или же лучше в классе сущности хранить тип формы для редактированя, и запускать ее "обычным" образом?

PM MAIL   Вверх
SaS1
Дата 26.6.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 14.6.2005

Репутация: нет
Всего: нет



dazy
У нас на проекте  судя по всему реализовано то, что вам нужно.
Для каждого Справочника мы формы отдельные не делали. Форма одна, но хитрая - она смотрит на класс объекта, который нужно отобразить или редактировать или добавить и если видит там строковое поле - добавляет текст бокс, для булевского - чек бокс, для енума - комбик и т.д. для какого-нибудь класса - типо лукап.
Ты получается эти поля заполняешь или едитишь, жмякаешь сохранить и оно у нас сохраняет специально написанным фреймворком, используя мэпинг на базу (когда начинали писать - Hibernate ещё не было:( ща переходим на него.)
Но реально проект у нас ОЧЕНЬ большой и поэтому написание такой хитрой формы оправдано хоть и гемороя с ней много, а для небольшого проекта это неоправданно тяжело пишется :(
PM MAIL   Вверх
dazy
Дата 26.6.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 1
Всего: 8



SaS1
Т.е. у вас для выбора/редактирования все же разные формы? Или вообще одна, просто работает в разных режимах?
PM MAIL   Вверх
Conkistador
Дата 28.6.2009, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 3.6.2009

Репутация: 2
Всего: 2



Цитата(dazy @  26.6.2009,  15:14 Найти цитируемый пост)
Т.е. можно написать что то вроде ShowFormByMagic("MySuperForm"); и MySuperForm стартанет? И это называется рефлекшн, я правильно понял?


ну я бы сказал вот это называется созданием класса по названию через рефлексию:
Код

IMyInterface tmpMyInterface = (IMyInterface)Activator.CreateInstance(Type.GetType("MyClass"));
                       
if(tmpMyInterface != null )
{
    tmpMyInterface.MyMetod(); 
}


Добавлено через 9 минут и 53 секунды
dazy,
я бы одратил больше вимания на эту фразу smile 
Цитата(SaS1 @  26.6.2009,  18:51 Найти цитируемый пост)
специально написанным фреймворком, используя мэпинг на базу 


Вот смотрите в  теории Вам наверное хочется что бы отдав кому то (контрол,форма ...) таблицу или класс построенный на основании таблицы, Вы получили бы набор полей с определенным поведением, а потом что бы этот элемент управления сумел еще и правильно распознать как сохранить измененные данные. 
Для этого необходимо 
1. Каким то образом найти ключевые поля таблицы (например из системных таблиц)
2. Отобразить различные элементы управления (textbox и т.д.) и связать их с соответствующими полями
3. Правильно сохранить изменения 

все еще интересно ;)
PM MAIL WWW   Вверх
dazy
Дата 28.6.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 1
Всего: 8



Цитата

Вот смотрите в  теории Вам наверное хочется что бы отдав кому то (контрол,форма ...) таблицу или класс построенный на основании таблицы, Вы получили бы набор полей с определенным поведением, а потом что бы этот элемент управления сумел еще и правильно распознать как сохранить измененные данные. 
Для этого необходимо 
1. Каким то образом найти ключевые поля таблицы (например из системных таблиц)
2. Отобразить различные элементы управления (textbox и т.д.) и связать их с соответствующими полями
3. Правильно сохранить изменения 

все еще интересно ;) 


С этим, как раз, проблем нет.  Я в основном упираюсь в сильверлайт, а там есть замечательная штука - RIA services. Делает практически тоже самое что вы и описали, как говорится out of the box. Отдаешь сущность, и говоришь, а построй мне форму по вот этой сущности - она строит, и валидацию прописывает, и описания показывает, определяет поля обязательные для заполнения и т.д.
Но дело не в этом, речь не о том, чтобы форму построить. Сам я не очень доверяю автогенераторным формам. Речь  о том, чтобы для каждой сущности запускать свою собственную форму редактирования. 
Т.е. у контрола есть кнопка "править" нажимаем на нее, и запускается форма для редактирования той сущности которая связана с этим конролом. А уж будет эта форма вручную написана или сгенерированая автоматом, это дело десятое.
PM MAIL   Вверх
Conkistador
Дата 29.6.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 3.6.2009

Репутация: 2
Всего: 2



Цитата(dazy @  28.6.2009,  20:15 Найти цитируемый пост)
Т.е. у контрола есть кнопка "править" нажимаем на нее, и запускается форма для редактирования той сущности которая связана с этим конролом. А уж будет эта форма вручную написана или сгенерированая автоматом, это дело десятое. 

я же привел вверху пример как можно создать класс по названию, что Вам мешает связать с вашими сущностями строки типа "MyProg.Form1"
а потом создав по названию класса экземпляр, вызвать метод Show() ?

PM MAIL WWW   Вверх
dazy
Дата 29.6.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 1
Всего: 8



Цитата

я же привел вверху пример как можно создать класс по названию, что Вам мешает связать с вашими сущностями строки типа "MyProg.Form1"
а потом создав по названию класса экземпляр, вызвать метод Show() ?


Да я понял, буду разбираться, спасибо.  
Я так просто, ворчу для поддержания беседы )))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0723 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.