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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataGridView теряет связь с таблицей, Связь DataTable и DataGridView 
:(
    Опции темы
ViterAlex
Дата 6.11.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 7.10.2009
Где: Харьков

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



В свойствах DGV в DataSource записан DataView. Программно к DataView я прикрепляю таблицу данных при загрузке формы с DGV. При первом открытии формы все нормально, но стоит форму закрыть и открыть вновь, как вылетает ошибка, там где столбцы делаются невидимыми. Говорит, что не задана ссылка на объект. Хотя таблица существует, DataView существует, DataSource для DGV задан, а столбцов у DGV почему-то уже нет. В чем может быть проблема? может как-то обновлять их нужно? Таблица данных точно заполнена и привязана к DataView
Код

Imports System.Data 
Imports MouseMileage.frmMain 'Основная форма программы
Public Class frmStatistic 
   Public Shared dtStatistic As DataTable 
  Private Sub frmStatistic_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    If dtStatistic IsNot Nothing Then dtvwStat.Table = dtStatistic 
    With dgrvStat 
      .Columns("MileageStart").Visible = False 
      .Columns("MileageEnd").Visible = False 
    End With 
    cmbStatDispFixedRange.SelectedIndex = 6 
  End Sub 

  Private Sub dgrvStat_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgrvStat.CellFormatting 
    If e.ColumnIndex = dgrvStat.Columns("Mileage").Index Then e.Value = CreateString(e.Value) 
  End Sub 
  
End Class

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Ух неселён я в VB но судя по твоим словам 
 наверно дело в том что ты место того чтобы опять обращаться к существуюшему классу, создаеш новый.

Добавлено через 1 минуту и 17 секунд
Что пишет та???
что то вроде 
Obgect reference not set of  .....

Это сообщение отредактировал(а) KuMa1104 - 6.11.2009, 23:36


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
ViterAlex
Дата 7.11.2009, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 7.10.2009
Где: Харьков

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



Цитата(KuMa1104 @  6.11.2009,  23:35 Найти цитируемый пост)
Что пишет та???

Object reference not set to an instance of an object.

Похоже, что ты прав, но почему так происходит? Если форму не закрывать, а просто прятать, то всё работает, а если закрыть, то следующий вызов дает такое исключение.
Я же проверял, DataSource на месте, таблица в DataView тоже на месте, только в DataGridView нет столбцов.

Поясню еще принцип работы, может это поможет. Итак, есть основная форма, которая добавляет записи в таблицу по нажатию кнопки. Поля в таблице задаются сразу при загрузке основной формы. DataGridView используется только для отображения. Никакого редактирования я не планирую. 
Эта строчка
Код

If dtStatistic IsNot Nothing Then dtvwStat.Table = dtStatistic 

появилась уже после того, как вылезла ошибка. До этого я присоединял таблицу к DataView при создании таблицы.
Сначала я вообще сделал без DataView и прикручивал таблицу к DataGridView напрямую. Но, поскольку нужно будет фильтровать выводимые строки, то решил остановится на DataView, как наиболее простом компоненте для этой цели. 
PM MAIL WWW ICQ   Вверх
KuMa1104
  Дата 8.11.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Ой ты так много понаписал а у меня бадун, вникать очень трудно, а воможно что и не нужно.

Цитата(ViterAlex @  7.11.2009,  01:03 Найти цитируемый пост)
Object reference not set to an instance of an object.


Компилятор ругаеться что  у тебя нет обекта.

Код

class a
{
public int d = 0;
}
main()
{
 a A;
A.d = 6;  //Object reference not set to an instance of an object  Надо не забывать A = new a();

}

Поматри внемательно, может ты когда ее повторно вызываеш, ты забыл её инициализировать



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
ViterAlex
Дата 8.11.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 7.10.2009
Где: Харьков

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



Перед открытием окна переменная dtStatistic уже инициализирована, в ней содержатся данные и она привязана к DataView, а DataView, в свою очередь, привязан к DataGridView еще на этапе проектирования.
PM MAIL WWW ICQ   Вверх
KuMa1104
Дата 9.11.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Ой, разум мой несколько прояснился и я начал замечать детали)

Цитата(ViterAlex @  8.11.2009,  15:23 Найти цитируемый пост)
Перед открытием окна переменная dtStatistic уже инициализирована, в ней содержатся данные и она привязана к DataView, а DataView, в свою очередь, привязан к DataGridView еще на этапе проектирования.


Но Компилятор ругаеться что  у тебя нет обекта!!!!!!!!!!!!!!!!!!!!!!!!!!!

Цитата(ViterAlex @  7.11.2009,  01:03 Найти цитируемый пост)
только в DataGridView нет столбцов.


Значит ты либо указываеш не правильное имя для столбца и он его не находит, либо у тебя его тупа нет, наверное всётаки там ничего нет!!!

Поставь брекпоинт, и проверь в дебага в том месте где у тебя выкидывает, к чима у тебя превязана DataGridView и что там содержиться.

Одно дело это то что ты там считаеш, а совсем другое то что там может оказаться)))))))




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
ViterAlex
Дата 9.11.2009, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 7.10.2009
Где: Харьков

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



Цитата(KuMa1104 @  9.11.2009,  00:01 Найти цитируемый пост)
Одно дело это то что ты там считаеш, а совсем другое то что там может оказаться)))))))

Уважаемый KuMa1104, я совершенно с тобой согласен. Первое, что я сделал, это поставил брейкпоинт и посмотрел. Всё проверил: таблица есть, столбцы в ней есть, DataView тоже есть и таблица к нему привязана, сам DataView привязан к DataGridView, но столбцов у DataGridView нет. Columns = 0 и хоть кол на голове теши!
Опять же эта штука проявляется только если форму с DataGridView открыть, закрыть и опять открыть. Форма не главная, вызывается из меню. Так вот, запустил я свою программу. Вызываю это окно со статистикой. Показывает, всё на месте: и таблица, и столбцы указанные спрятаны. Хорошо, закрыл форму, вызываю её опять. И тут я получаю мессэдж, что нет у меня таких столбцов


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Цитата(ViterAlex @  9.11.2009,  00:55 Найти цитируемый пост)
Всё проверил: таблица есть, столбцы в ней есть, DataView тоже есть и таблица к нему привязана, сам DataView привязан к DataGridView, но столбцов у DataGridView нет. Columns = 0 и хоть кол на голове теши!


Вот плохо что ты на VB пишеш, я ж провыерить нормально не могу. Но проект выложи  дэбагом проидусть всётаки.

Код

MyWiew = new DataView(thisDataSet.Tables["Customers"]);
    
dataGridView1.DataSource = MyWiew;

Собственно интересуют 2 строчки.

Если таблица есть, столбцы в ней есть, DataView тоже есть и таблица к нему привязана.

То проверь ещё раз, сначала у DataView по твоему утверждению там не НОЛЬ только проверь во второй раз когда форму открываеш.
Код

MyWiew.Table.Columns.Count


Если там не ноль, то тогда когда привязываеш её к dataGridView1 то после у него тоже свойство
Код

((DataView)dataGridView1.DataSource).Table.Columns.Count


они должны совпадать, если нет то проверь свойства на совпадения

Код

((DataView)dataGridView1.DataSource).Table.TableName
MyWiew.Table.TableName




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
ViterAlex
Дата 9.11.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 7.10.2009
Где: Харьков

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



Вот что показывает на брэйкпоинт. Всё есть.
user posted image
Всё проверил, всё на месте, кроме Columns у DataGridView при повторном вызове формы.
Проект выслал.
PM MAIL WWW ICQ   Вверх
KuMa1104
Дата 9.11.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Цитата(ViterAlex @  9.11.2009,  11:54 Найти цитируемый пост)
Проект выслал.

И где он???
Куда ты его выслал??

Вот так нужно

Афоризм:

Добавлено через 11 минут и 51 секунду
И не забудь Базу данных))

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  _______.txt 0,14 Kb


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
ViterAlex
Дата 9.11.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 7.10.2009
Где: Харьков

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



Выслал на мыло тебе, ящик, что на рамблере
База данных не нужна. Просто запусти, выбери меню «Статистика», нажми «Начать слежку», «Остановить слежку». Данные в таблицу добавятся.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  ___________.rar 753,24 Kb
PM MAIL WWW ICQ   Вверх
KuMa1104
Дата 9.11.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Я посмотрел, VB я наблюдал впервые. 
Подчёркиваю я понятия о нём не имею!!!!!!!!!!!!!!

Я несовсем понемаю, механизмы создания в нём обектов и удаления их.

Честно говоря многое меня повергло в шок.
Я так понял что там переменные не инициализируються вообще.

Взгленул на твою проблему. Исправил))))

вставь в код для обработчика клика
Код

Private Sub mnuStatistic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuStatistic.Click
        With My.Settings
            frmStatistic.dgrvStat.AutoGenerateColumns = True
            nMileage = .Mileage
            frmConfig.cmbUnits.SelectedIndex = .cmbConfigUnits
            mnuStatistic.Enabled = .chbConfigKeepStatistics
            nCalibrateCoeff = .CalibrCoeff
            If Not .Calibrated Then mnuCalibrate_Click(mnuCalibrate, e)
            If .dbFile <> "" And My.Settings.chbConfigKeepStatistics Then
                dtStatistic = New DataTable
                ReadDB(dtStatistic, .dbFile, "xml")
            Else
                CreateNewDataTable(dtStatistic)
                'frmStatistic.dgrvStat.DataSource = dtStatistic
            End If
            If .chbConfigAutoStart Then ShadowingOn(btnStartStop, e)
            If .chbConfigShowFlying Then frmFlying.Show()
            lblCurrPosValue.Text = "—"
            Me.Location = .frmMainLocation
            DisplayDistance()
        End With
        frmStatistic.Show()
    End Sub


вместо своего
Код

 Private Sub mnuStatistic_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuStatistic.Click
        
        frmStatistic.Show()
    End Sub


Я взял твой метод инициализации и заставил инициализировать каждый раз при вызове.

Я не знаю где и что там не работало, и знать не хочу, дальше сам методом тыка убери всё ненужное от туда и будет работать.

А после возьми книжку по С# и изучай)))))

Добавлено через 8 минут и 33 секунды
Блин слушай я себя реально после этого чуть больше уважать стал.

Вот сижу дальше текст твоей программы читаю, в именно VB вообще понять ничего не могу smile 
Но всё работает))) 


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
ViterAlex
Дата 9.11.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 7.10.2009
Где: Харьков

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



KuMa1104, ты гений, хотя я сам не понимаю почему.

Перенес объявление переменной dtStatistic внутрь главной формы и всё заработало. Но я не пойму почему так происходит. Ведь я её изначально объявил как Shared, и инициализировал при загрузке главной формы. Если я закрываю окно, то класс уничтожается? Что, если переменная объявлена внутри класса, то её обязательно внутри класса и инициализировать нужно? Как-то я не совсем понимаю.

Про си-шарп я задумываюсь давно, но толчка нет, наверное придется «плюсы» все-таки учить, нужно будет скоро по работе
PM MAIL WWW ICQ   Вверх
KuMa1104
Дата 9.11.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

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



Цитата(ViterAlex @  9.11.2009,  20:26 Найти цитируемый пост)
Ведь я её изначально объявил как Shared, и инициализировал при загрузке главной формы. Если я закрываю окно, то класс уничтожается? Что, если переменная объявлена внутри класса, то её обязательно внутри класса и инициализировать нужно? Как-то я не совсем понимаю.


Не чего страшного это же VB думаю его никто до конца не понимает)))))



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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