У меня есть DataGridView
, где каждый из индексов его строк соответствует индексу в List<SomeClass>
, например, вторая строка DataGridView
соответствует List[1]
(считая от нуля) и т. д. Когда пользователь нажимает на столбец 0 dataGridView1, я отображаю List[e.RowIndex]
на другом DataGridView
, например:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
dataGridView2.Rows.Clear();
if (e.RowIndex >= 0 && !dataGridView1.Rows[e.RowIndex].IsNewRow)
{
for (int j = 0; j < Data[e.RowIndex].Values.Count; j++)
{
//add Data[e.RowIndex].Values to dataGridView2
}
}
}
}
Это работает нормально, и я пытаюсь реализовать то же самое, но на этот раз, используя клавиши вверх и вниз на клавиатуре, используя событие KeyDown:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Down && dataGridView1.CurrentCell.ColumnIndex == 0)
{
if (dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex - 1].IsNewRow)
{
dataGridView2.Rows.Clear();
e.Handled = true;
}
if (!dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex + 1].IsNewRow)
{
dataGridView2.Rows.Clear();
for (int j = 0; j < Data[dataGridView1.CurrentCell.RowIndex + 1].Values.Count; j++)
{
//add Data[dataGridView1.CurrentCell.RowIndex + 1].Values to dataGridView2
}
}
}
else if (e.KeyCode == Keys.Up && dataGridView1.CurrentCell.ColumnIndex == 0)
{
if (dataGridView1.CurrentCell.RowIndex > 0)
{
dataGridView2.Rows.Clear();
for (int j = 0; j < Data[dataGridView1.CurrentCell.RowIndex - 1].Values.Count; j++)
{
//add Data[dataGridView1.CurrentCell.RowIndex - 1].Values to dataGridView2
}
}
}
}
Это работает, но выдает
Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс
ошибка, во 2-м if
, в следующих двух случаях:
- При использовании стрелки вверх до строки 0 и один раз там стрелка вниз
- При прокрутке до строки * (новая строка всегда находится внизу dataGridView).
Кажется, я что-то упускаю здесь, кто-нибудь может мне помочь или указать мне правильное направление?