|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.04.2012, 16:00 | #1 |
Пользователь
Регистрация: 14.11.2009
Сообщений: 12
|
Передача DataTable из одного класса в другой.
Есть форма содержащая ДатаГрид, в ней имеется такой метод:
Код:
Код:
|
06.04.2012, 17:00 | #2 |
Пользователь
Регистрация: 14.11.2009
Сообщений: 12
|
Еще немного информации.
Возвращается значение null, потому что я создаю новый обьект этой строчкой MainForm mForm = new MainForm(); По идее никаких данных так нету. Но вот как же мне все таки передать содержимое датагрида в другой класс? |
06.04.2012, 21:55 | #3 |
Форумчанин
Регистрация: 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 ЕСЛИ ЕСТЬ НЕПОНЯТНЫЕ МОМЕНТЫ - ПИШИТЕ! метод очень удобный...я так всегда организовываю свои приложения!
У женщин чары образуются из стрингов;
А у программистов наоборот - стринги образуются из чаров; |
08.04.2012, 19:02 | #4 |
Пользователь
Регистрация: 14.11.2009
Сообщений: 12
|
Спасибо, это решило мою проблему! Как раз то, что мне было нужно. Очень удобно. Вы подробно и внятно все обьяснили, за что отдельное спасибо!
|
29.03.2013, 13:51 | #5 |
Новичок
Джуниор
Регистрация: 29.03.2013
Сообщений: 1
|
Зарегался только что бы сказать спасибо =)
Все так понятно расписали про одиночку) |
29.03.2013, 16:11 | #6 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 147
|
аххахаха, ну Спасибо, приятно)
У женщин чары образуются из стрингов;
А у программистов наоборот - стринги образуются из чаров; |
08.08.2013, 13:21 | #7 |
Новичок
Джуниор
Регистрация: 25.08.2010
Сообщений: 2
|
Привет!
Спасибо за ответ, вот только у меня не получается реализовать прием который ты описал. Ругается вот на этом моменте: private CurrentSession() { DS = new DataTAble("MyDataTable"); } public DS{get;set;} единственное что я исправил это private CurrentSession() {DataTable DS = new DataTAble("MyDataTable"); } а далее пишет что не удалось найти имя типа... Не подскажешь, в чём может быть проблема? |
08.08.2013, 14:12 | #8 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,883
|
Код:
чисто интуитивно предложу такое: Код:
А вот как раз Ваше исправление это неправильно, вместо присвоения в свойство(как было) поставили присвоение в локальную переменную, что бесполезно. |
08.08.2013, 15:16 | #9 |
Новичок
Джуниор
Регистрация: 25.08.2010
Сообщений: 2
|
Спасибо!
На самом деле DataTAble, я исправил сразу, вопрос был касательно public DS На самом деле я только осваиваю C# так что порой сталкиваюсь с "детскими" ошибками. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Необходимо передать переменную из одного класса в другой. | 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 |