Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Базы данных под .NET > DataGridView теряет связь с таблицей |
Автор: ViterAlex 6.11.2009, 17:05 | ||
В свойствах DGV в DataSource записан DataView. Программно к DataView я прикрепляю таблицу данных при загрузке формы с DGV. При первом открытии формы все нормально, но стоит форму закрыть и открыть вновь, как вылетает ошибка, там где столбцы делаются невидимыми. Говорит, что не задана ссылка на объект. Хотя таблица существует, DataView существует, DataSource для DGV задан, а столбцов у DGV почему-то уже нет. В чем может быть проблема? может как-то обновлять их нужно? Таблица данных точно заполнена и привязана к DataView
|
Автор: KuMa1104 6.11.2009, 23:35 |
Ух неселён я в VB но судя по твоим словам наверно дело в том что ты место того чтобы опять обращаться к существуюшему классу, создаеш новый. Добавлено через 1 минуту и 17 секунд Что пишет та??? что то вроде Obgect reference not set of ..... |
Автор: ViterAlex 7.11.2009, 01:03 | ||
Object reference not set to an instance of an object. Похоже, что ты прав, но почему так происходит? Если форму не закрывать, а просто прятать, то всё работает, а если закрыть, то следующий вызов дает такое исключение. Я же проверял, DataSource на месте, таблица в DataView тоже на месте, только в DataGridView нет столбцов. Поясню еще принцип работы, может это поможет. Итак, есть основная форма, которая добавляет записи в таблицу по нажатию кнопки. Поля в таблице задаются сразу при загрузке основной формы. DataGridView используется только для отображения. Никакого редактирования я не планирую. Эта строчка
появилась уже после того, как вылезла ошибка. До этого я присоединял таблицу к DataView при создании таблицы. Сначала я вообще сделал без DataView и прикручивал таблицу к DataGridView напрямую. Но, поскольку нужно будет фильтровать выводимые строки, то решил остановится на DataView, как наиболее простом компоненте для этой цели. |
Автор: KuMa1104 8.11.2009, 14:06 | ||
Ой ты так много понаписал а у меня бадун, вникать очень трудно, а воможно что и не нужно. Компилятор ругаеться что у тебя нет обекта.
Поматри внемательно, может ты когда ее повторно вызываеш, ты забыл её инициализировать |
Автор: ViterAlex 8.11.2009, 15:23 |
Перед открытием окна переменная dtStatistic уже инициализирована, в ней содержатся данные и она привязана к DataView, а DataView, в свою очередь, привязан к DataGridView еще на этапе проектирования. |
Автор: ViterAlex 9.11.2009, 00:55 | ||
Уважаемый KuMa1104, я совершенно с тобой согласен. Первое, что я сделал, это поставил брейкпоинт и посмотрел. Всё проверил: таблица есть, столбцы в ней есть, DataView тоже есть и таблица к нему привязана, сам DataView привязан к DataGridView, но столбцов у DataGridView нет. Columns = 0 и хоть кол на голове теши! Опять же эта штука проявляется только если форму с DataGridView открыть, закрыть и опять открыть. Форма не главная, вызывается из меню. Так вот, запустил я свою программу. Вызываю это окно со статистикой. Показывает, всё на месте: и таблица, и столбцы указанные спрятаны. Хорошо, закрыл форму, вызываю её опять. И тут я получаю мессэдж, что нет у меня таких столбцов |
Автор: KuMa1104 9.11.2009, 11:20 | ||||||||||
Вот плохо что ты на VB пишеш, я ж провыерить нормально не могу. Но проект выложи дэбагом проидусть всётаки.
Собственно интересуют 2 строчки. Если таблица есть, столбцы в ней есть, DataView тоже есть и таблица к нему привязана. То проверь ещё раз, сначала у DataView по твоему утверждению там не НОЛЬ только проверь во второй раз когда форму открываеш.
Если там не ноль, то тогда когда привязываеш её к dataGridView1 то после у него тоже свойство
они должны совпадать, если нет то проверь свойства на совпадения
|
Автор: ViterAlex 9.11.2009, 11:54 |
Вот что показывает на брэйкпоинт. Всё есть.![]() Всё проверил, всё на месте, кроме Columns у DataGridView при повторном вызове формы. Проект выслал. |
Автор: KuMa1104 9.11.2009, 13:16 |
И где он??? Куда ты его выслал?? Вот так нужно Афоризм: Добавлено через 11 минут и 51 секунду И не забудь Базу данных)) |
Автор: ViterAlex 9.11.2009, 13:54 |
Выслал на мыло тебе, ящик, что на рамблере База данных не нужна. Просто запусти, выбери меню «Статистика», нажми «Начать слежку», «Остановить слежку». Данные в таблицу добавятся. |
Автор: KuMa1104 9.11.2009, 18:52 | ||||
Я посмотрел, VB я наблюдал впервые. Подчёркиваю я понятия о нём не имею!!!!!!!!!!!!!! Я несовсем понемаю, механизмы создания в нём обектов и удаления их. Честно говоря многое меня повергло в шок. Я так понял что там переменные не инициализируються вообще. Взгленул на твою проблему. Исправил)))) вставь в код для обработчика клика
вместо своего
Я взял твой метод инициализации и заставил инициализировать каждый раз при вызове. Я не знаю где и что там не работало, и знать не хочу, дальше сам методом тыка убери всё ненужное от туда и будет работать. А после возьми книжку по С# и изучай))))) Добавлено через 8 минут и 33 секунды Блин слушай я себя реально после этого чуть больше уважать стал. Вот сижу дальше текст твоей программы читаю, в именно VB вообще понять ничего не могу ![]() Но всё работает))) |
Автор: ViterAlex 9.11.2009, 20:26 |
KuMa1104, ты гений, хотя я сам не понимаю почему. Перенес объявление переменной dtStatistic внутрь главной формы и всё заработало. Но я не пойму почему так происходит. Ведь я её изначально объявил как Shared, и инициализировал при загрузке главной формы. Если я закрываю окно, то класс уничтожается? Что, если переменная объявлена внутри класса, то её обязательно внутри класса и инициализировать нужно? Как-то я не совсем понимаю. Про си-шарп я задумываюсь давно, но толчка нет, наверное придется «плюсы» все-таки учить, нужно будет скоро по работе |
Автор: KuMa1104 9.11.2009, 20:49 | ||
Не чего страшного это же VB думаю его никто до конца не понимает))))) |