W dataGridView w zdarzeniu CellClick mam pobieranie z wyświetlonej bazy do pól textbox, combobox, maskedTextBox i dateTimePicker danych z naciśniętego "zaznaczonego" wiersza ale po naciśnięciu kolumny u góry wyświetla mi się błąd "Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index". jak mogę się tego błędu pozbyć? mogę to jakoś zablokować czy dać to w try catch?
Sprawdzaj czy indeks zaznaczonego wiersza nie jest mniejszy od 0
jest poprawny. kod mam umieszczony w zdarzeniu CellClick i chyba nic z tym nie zrobię bo po naciśnięciu na nazwę kolumny nie mam zaznaczony wierszy i nie ma co pobrać więc wyskakuje błąd. dałem to w try catch z MessageBox "Nie można pobrać danych!". dzięki za zainteresowanie
Pokaż kod, bo coś mieszasz. Korzystanie w tym wypadku z wyjątków jest imho nie do końca poprawne, a szczególnie z wyjątku przekroczenia zakresu jakiegoś kontenera. Wyjątki służą do obsługi sytuacji wyjątkowych.
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
RowIndex = e.RowIndex;
DataGridViewRow Row = dataGridView1.Rows[RowIndex];
textBox1.Text = Row.Cells[1].Value.ToString();
textBox2.Text = Row.Cells[2].Value.ToString();
textBox3.Text = Row.Cells[3].Value.ToString();
dateTimePicker1.Value = Convert.ToDateTime(Row.Cells[4].Value.ToString());
textBox5.Text = Row.Cells[5].Value.ToString();
textBox6.Text = Row.Cells[6].Value.ToString();
textBox7.Text = Row.Cells[7].Value.ToString();
textBox9.Text = Row.Cells[9].Value.ToString();
maskedTextBox1.Text = Row.Cells[8].Value.ToString();
comboBox2.Text = Row.Cells[10].Value.ToString();
comboBox3.Text = Row.Cells[11].Value.ToString();
}
catch (Exception)
{
MessageBox.Show("Nie można pobrać danych!");
}
}
Musisz sprawdzić czy RowIndex nie dostaniesz czasem mniejszy od zera, najlepiej sprawdź debuggerem jaki RowIndex dostaje e jeżeli klikniesz nie tam gdzie trzeba.
Za catch(Exception)
powinni ucinać łapki. Łapanie wyjątków na pokemona "catch'em all!" to bardzo zły pomysł.