Przepraszam jeśli źle ubieram w słowa moje zapytanie.
Mam formę 'ZlecenieLista' w którym znajduje się komponent dataGridView 'dataGridZlecenie', który odczytuje dane z bazy sql w określonych odstępach czasu 'timer_Tick'.
private void ZlecenieLista_Load(object sender, EventArgs e)
{
wypelnienie_tabeli();
}
private void wypelnienie_tabeli()
{
string aa = "SELECT tb_zlecenie.id_zlecenie AS 'KT', ... jakieś zapytanie ...";
SqlConnection con = new SqlConnection(Program.connectionString("")); //connection string - poprawny
con.Open();
using (SqlDataAdapter a = new SqlDataAdapter(connectionstring, con))
{
DataTable t = new DataTable();
a.Fill(t);
dataGridZlecenie.DataSource = t;
dataGridZlecenie.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.Fill;
dataGridZlecenie.Columns["KT"].Width = 40; // tu występuje błąd
dataGridZlecenie.Columns["KT"].Frozen = true;
...
}
con.Close();
}
private void timer_Tick(object sender, EventArgs e)
{
...
wypelnienie_tabeli();
...
}
Samodzielnie cały ten zestaw działa w pełni poprawnie.
Ale mam też drugą forme z zakladkami TabControl.
Na jednej z zakładek znajduje się dynamicznie utworzony obiekt 'ZlecenieLista':
private void wczytanie_zlecen_klienta()
{
ZlecenieLista okno_Zlecenie = new ZlecenieLista("Klient", rekord);
okno_Zlecenie.TopLevel = false;
okno_Zlecenie.AutoScroll = true;
this.panel_zlecenia_klienta.Controls.Add(okno_Zlecenie);
okno_Zlecenie.Dock = DockStyle.Fill;
okno_Zlecenie.Show();
}
I teraz problem:
Wariant poprawny:
Otwieram formę główną i przechodzę na zakładkę z obiektem 'ZlecenieLista'. Oglądam go sobie: działa.
Wszystko działa cacy. Dane się odświeżają.
Wariant niepoprawny:
Otwieram formę główną i przechodzę na zakładkę z obiektem 'ZlecenieLista'. Oglądam go sobie: działa jak wcześniej, ale przełączam zakładkę na inną.
Program działa, ale czasami, po kilkunastu sekundach wyrzuca błąd:
System.NullReferenceException: Object reference not set to an instance of an object.
at System.Windows.Forms.DataGridViewBand.set_Thickness(Int32 value)
at System.Windows.Forms.DataGridViewColumn.set_Width(Int32 value)
at WindowsFormsApplication1.ZlecenieLista.wypelnienie_tabeli()
at WindowsFormsApplication1.ZlecenieLista.timer_Tick(Object sender, EventArgs e)
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Debugger pokazuje że wszystkie zmienne formy 'ZlecenieLista' są NULL pomimo że chwilę wcześniej datagrid się wczytał i działał.
Nie jest to jedyny przypadek. Podobnie dzieje się też w innych miejscach tam, gdzie obiekty datagrid otwarte są jako dynamiczne obiekty i nie są widoczne w danej chwili na ekranie.
Nie wiem jak to ugryźć. Google nie wiedzą, albo nie potrafię sformułować zapytania.