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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача данных в класс (модальная форма), Концептуальный вопрос :) 
:(
    Опции темы
ivashkanet
  Дата 31.8.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Мне нужно в форму, перед ее показом, передать массу данных: тип диалога, список сотрудников, их ID, параметры операции (5-7 штук), ...

Варианты решения:
1) Майстрачить конструктор на 10-15 параметров (не охота, криво как то это будет выглядеть).
2) Создать структуру, включающую в себя нужные параметры (мне нравится больше всего).
3) Передать часть функциональности по сбору информации в диалог, что сократит число параметров до 4-6 (но тогда инкапсуляция летит к чертям smile )
4) не учтенный мной метод (т.е. ваш  smile )

Зарание спасибо.
P.S. Принимаются любые мысли, даже бредовые. Это тема -- обсуждение.


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

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



По-моему 2) лучше всего smile Полюбому кода прийдётся много писать, тож лучше 2) - так проще ИМХО.


--------------------
user posted image
PM MAIL   Вверх
ivashkanet
Дата 31.8.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Bogdan1024, ага. 
Но я стал реализовывать структуру и оказалось, что у нее конструктор будет из того же числа параметров  
т.е. вместо new dialog(...,...,...,...,...,..,...,..) будет new dialog(new InputData(...,...,...,...,...,..,...,..)) smile 

Построчно ингициализировать что ли  smile 
PM MAIL WWW ICQ   Вверх
$tatic
Дата 31.8.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ИМХО класс (не структура) здесь лучше всего будет - код аккуратнее, да и расширять легче в случае необходимости. Кроме того, проще будет получать измененные данные из диалога в случае необходимости:
Код

DialogParameters parameters = new DialogParameters();
// далее должна идти инициализация параметров
// ...
DialogForm dialog = new DialogForm(parameters);
dialog.ShowDialog();
dialog.Dispose();
// теперь можно использовать измененные диалогом параметры (например если был нажат ОК) в случае необходимости

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

Это сообщение отредактировал(а) $tatic - 31.8.2006, 10:22
PM MAIL   Вверх
Naum
Дата 31.8.2006, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

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



Цитата(ivashkanet @  31.8.2006,  09:34 Найти цитируемый пост)
P.S. Принимаются любые мысли, даже бредовые


Ну если так. Все равно делать нечего. Вот бредовая идея. Хранить все эти параметры в БД. В родительской форме менять их, а в модальной все что нужно (лэйблы там, текстбоксы) связать с полями БД.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 31.8.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



$tatic, результат от параметров принимать не понадобится. Так что структура возможно будет лучше.
P.S. А за название класса спасибо. Никак не мог придумать нормальное название  smile 
PM MAIL WWW ICQ   Вверх
$tatic
Дата 31.8.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, для больших классов свойства инициализируются построчно. Можно конечно сделать конструктор например из XML-файла или таблицы данных. Но в каждом частном случае это по-своему решается. Тем более, что определять свойства все равно придется.
PM MAIL   Вверх
ivashkanet
Дата 31.8.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Naum,  smile 
Зачот smile

Добавлено @ 10:23 
Нееет, товарищи. Извиняюсь что не пояснил. Параметры динамически меняются. В зависимости от того какая кнопка нажата, на какой строчке в гриде стоит курсор. А часть параметров действительно берется из базы smile
PM MAIL WWW ICQ   Вверх
$tatic
Дата 31.8.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ivashkanet @  31.8.2006,  11:19 Найти цитируемый пост)
структура возможно будет лучше

Нет, не лучше. Структура будет передаваться копированием, что влечет за собой лишний расход памяти.
PM MAIL   Вверх
ivashkanet
Дата 31.8.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



$tatic, то же правда smile
Значит лучше класс
PM MAIL WWW ICQ   Вверх
marcusmae
Дата 31.8.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


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

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



ivashkanet, и я выскажу свои бредовые мысли :

Код

public constructor(params object[] ctorArgs)
{
    // всем, что передали в параметрах, можно вслепую (в цикле) проинициализировать
    // поля и свойства класса через .GetType().GetField(name) и т.п.
    // (при том условии, что однозначное соотвествие может быть найдено)
}




Это сообщение отредактировал(а) marcusmae - 31.8.2006, 14:02


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
ivashkanet
Дата 31.8.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



marcusmae, нет, мне не нравиться сам факт передачи 15 параметров конструктору.
P.S. Я, в принципе, уже закодировал п.2 в виде класса smile
P.P.S. Но может кто-то идею класную подкинет smile
PM MAIL WWW ICQ   Вверх
Exception
Дата 31.8.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А зачем всё конструктором передавать smile . Просто расставляй свойства, так будет читабельнее. Хотя, если тебе не нравится и этот вариант, можешь "выставить наружу" контролы главной формы, а из дочерней обращаться к ним (например, через свойство ParentForm). Но это нарушает инкапсуляцию и затрудняет поддержку кода.

Добавлено @ 14:35 
$tatic, позволь не согласиться. Хотя структура и копируется, но занимает память в стеке и удаляется по выходе из области доступа, в то время как класс порождает много накладных расходов: он занимает память в управляемой куче и удалится только при следующей сборке мусора. Поэтому, здесь разумнее использовать именно структуру.
PM   Вверх
mr.DUDA
Дата 2.9.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Помимо всего прочего, структура (или класс) хороша тем, что на неё можно забиндить контролы на форме. А если работа к тому же с БД, то датасеты на то и спроектированы, чтобы их было удобно в формах юзать  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
Killerman
Дата 8.3.2008, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mr.DUDA @ 2.9.2006,  11:14)
Помимо всего прочего, структура (или класс) хороша тем, что на неё можно забиндить контролы на форме.

А как это сделать? не совсем понял.  smile 

А основной вопрос у меня такой - из главной формы по нажатию кнопки создаю диалоговое окно, в котором заполняю текстбоксы. чтобы передать из них данные в БД. Значит открываю коннекшн с базой - Connection Opened. А когда вызываю процедуру из базы, или передаю ей текстовую команду - выскакивает ошибка - процедура не найдена. а с текстовым сообщением - то же самое, не нашло таблицу. что за бред.  smile  делаю то же самое из обычной формы - все работает. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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