Diskuze: System.NullReferenceException
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("Title", typeof(String));
table.Columns.Add("Messages", typeof(String));
dataGridView1.DataSource = table;
dataGridView1.Columns["Messages"].Visible=false;
dataGridView1.Columns["Title"].Width=317;
}
Tady inicializujes tu tiredu vnutri tej metody.
public DataTable table;
Tady ju mas venku ale neinicializujes ju nikde(v konstrukte narp). Pokat ti to pada tady
private void btmSave_Click(object sender, EventArgs e)
{
table.Rows.Add(textTitle.Text, textMessage.Text); // zde to hlásí error
textTitle.Clear();
textMessage.Clear();
}
tak proto lebo to pouziva tuto
public DataTable table;
Musis ju nekde najprv inilializovat napr vtem konstrukte. Nerobim WF ale jestli ju inicilizujes nekde inde(binding napr) tak tam je chyba
Jo a pouzivat nazev 2x taky isti v jednej class je chyba lebo sa ti to pak plete...Bud vtej metode daj co ja vim tableXXX alebo aspon ked pouzivas tu public DataTable table; tak daj prednu this.table
Problém je v tom, že když ve funkci dataGridView1_CellContentClick do proměnné table vytváříš novou tabulku, tak se ti neuloží do dříve vytvořené proměnné table, ale vytvoří se ti nová lokální proměnná, která se po dokončení funkce smaže. Když poté přistupuješ k table, tak to vyhodí výjimku protože table je null.
Vyřešit to můžeš tak, že na řádku DataTable table = new DataTable(); smažeš to DataTable na začátku.
Zobrazeno 5 zpráv z 5.