Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 16:00   #1
lex0rg
Пользователь
 
Регистрация: 14.11.2009
Сообщений: 12
По умолчанию Передача DataTable из одного класса в другой.

Есть форма содержащая ДатаГрид, в ней имеется такой метод:
Код:
public DataTable GetDataGridContent()
        {
            DataTable myDT;
            myDT = (DataTable)dataGrid.DataSource;
            return myDT;
        }
Из другого класса(Business Logic) я пытаюсь вызвать метод таким образом:
Код:
MainForm mForm = new MainForm();
DataTable dt;
dt = mForm.GetDataGridContent();
Такой способ не работет. Как я могу передать данные в бизнес логику, желательно не нарушая ООП?
lex0rg вне форума Ответить с цитированием
Старый 06.04.2012, 17:00   #2
lex0rg
Пользователь
 
Регистрация: 14.11.2009
Сообщений: 12
По умолчанию

Еще немного информации.
Возвращается значение null, потому что я создаю новый обьект этой строчкой MainForm mForm = new MainForm();
По идее никаких данных так нету.
Но вот как же мне все таки передать содержимое датагрида в другой класс?
lex0rg вне форума Ответить с цитированием
Старый 06.04.2012, 21:55   #3
stalsoft
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 147
По умолчанию

Если ты учил паттерны, то предлагаю использовать тебе Singleton.
К примеру, у нас есть твой DataTable, который является datasource для какого то грида, но нам нужно что б к нему мог достучаться каждый.

значит делаем например класс, назовем его CurrentSession (ну типа текущая сессия). Что б реализовать этот класс с помощью паттерна Singleton (одиночка), мы добавим в него закрытый (private) конструктор, который даже может ничего не делать. Потом в классе объявим два статических (static) свойства. Одно свойства (назовем его _CS) будет возвращать объект нашего класса (CurrentSession) и при этом будет закрытое (private), а другое - будет иметь название Instance, при обращении к которому, мы будем получать доступ ко все методам, свойствам и тд и тп нашего класса (CurrentSession). Свойство Instance будет просто возвращать закрытое свойство _CS, но при этом проверять его на NULL.
Теперь добавим свойство в наш класс (CurrentSession) к примеру DataTable, и назовем его DS (ну типа сокращенно от Data Source), и откроем его (public).
Код снизу демонстрирует мои слова:
P.S. конструктор я не оставил пустым, я туда добавил инициализацию нашей DataTable, что б она не была равна null.

public class CurrentSession
{
private static CurrentSession _CS;
public static CurrentSession Instance
{
get
{
if (_CS == null) _CS = new CurrentSession();
return _CS;
}
}
private CurrentSession() { DS = new DataTAble("MyDataTable"); }
public DS{get;set;}
}

Теперь в любом месте нашего кода (естественно предварительно добавив пространство имен класса CurrentSession, если надо) мы можем прописать следующее:

//создадим DataTable с двумя столбцами и одной строкой
DataTable dt = new DataTable();
dt.Columns.Add("col1");
dt.Columns.Add("col2");
dt.Rows.Add(new object[] { "ololo", "tro-lo-lo"});

//Теперь сохраним на DataTable в объект класса CurrentSession
CurrentSession.Instance.DS = dt;

//А потом...с любого любого места...другая форма...другой класс...просто пишем
CurrentSession.Instance.DS - таким образом получая доступ к DataTable

ЕСЛИ ЕСТЬ НЕПОНЯТНЫЕ МОМЕНТЫ - ПИШИТЕ!

метод очень удобный...я так всегда организовываю свои приложения!
У женщин чары образуются из стрингов;
А у программистов наоборот - стринги образуются из чаров;
stalsoft вне форума Ответить с цитированием
Старый 08.04.2012, 19:02   #4
lex0rg
Пользователь
 
Регистрация: 14.11.2009
Сообщений: 12
По умолчанию

Спасибо, это решило мою проблему! Как раз то, что мне было нужно. Очень удобно. Вы подробно и внятно все обьяснили, за что отдельное спасибо!
lex0rg вне форума Ответить с цитированием
Старый 29.03.2013, 13:51   #5
Aydar
Новичок
Джуниор
 
Регистрация: 29.03.2013
Сообщений: 1
По умолчанию

Зарегался только что бы сказать спасибо =)
Все так понятно расписали про одиночку)
Aydar вне форума Ответить с цитированием
Старый 29.03.2013, 16:11   #6
stalsoft
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 147
По умолчанию

аххахаха, ну Спасибо, приятно)
У женщин чары образуются из стрингов;
А у программистов наоборот - стринги образуются из чаров;
stalsoft вне форума Ответить с цитированием
Старый 08.08.2013, 13:21   #7
kuzya987
Новичок
Джуниор
 
Регистрация: 25.08.2010
Сообщений: 2
По умолчанию

Привет!

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

Ругается вот на этом моменте:

private CurrentSession() { DS = new DataTAble("MyDataTable"); }
public DS{get;set;}

единственное что я исправил это
private CurrentSession() {DataTable DS = new DataTAble("MyDataTable"); }

а далее пишет что не удалось найти имя типа...

Не подскажешь, в чём может быть проблема?
kuzya987 вне форума Ответить с цитированием
Старый 08.08.2013, 14:12   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
public DS
нет типов, посему надо сперва подучить азы языка, а не "реализовывать приёмы"
чисто интуитивно предложу такое:
Код:
public DataTable DS
Ругается также скорее всего и на DataTAble, нужно соблюдать регистр
А вот как раз Ваше исправление это неправильно, вместо присвоения в свойство(как было) поставили присвоение в локальную переменную, что бесполезно.
phomm вне форума Ответить с цитированием
Старый 08.08.2013, 15:16   #9
kuzya987
Новичок
Джуниор
 
Регистрация: 25.08.2010
Сообщений: 2
По умолчанию

Спасибо!

На самом деле DataTAble, я исправил сразу, вопрос был касательно public DS

На самом деле я только осваиваю C# так что порой сталкиваюсь с "детскими" ошибками.
kuzya987 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо передать переменную из одного класса в другой. scray PHP 4 27.12.2009 13:01
передача данных ячейки из одного документа в другой. iamaxl Microsoft Office Excel 3 04.07.2009 07:08
Передача данных из одного файла Access в другой. wstil БД в Delphi 2 26.05.2009 23:23
Передача метода класса в качестве параметра в другой метод Dmytry87 Общие вопросы C/C++ 0 12.11.2008 15:28
Передача файла с одного компа на другой Kocapb Фриланс 4 18.11.2007 18:37