событие нажатия клавиши datagridview для добавления новой строки

У меня есть datagridview с 6 столбцами, я хочу добавлять новую строку каждый раз, когда нажимаю кнопку «Tab» (только) в последней ячейке столбца, я использовал приведенный ниже код, чтобы предотвратить добавление строки каждый раз, когда я записываю значение ячейки

dataGridView1.AllowUserToAddRows = false;
dataGridView1.Rows.Add();

Я уже использовал событие нажатия клавиши в ячейке [5] (последняя ячейка), но это не работает, последняя ячейка была настроена только для чтения

private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (dataGridView1.CurrentCell.ColumnIndex == 5)
    {
        if (e.KeyChar == (char)Keys.Tab)
        {
            dataGridView1.Rows.Add();
        }
    }
}

спасибо за ваше время, все равно извините за мой английский


person Barakuan    schedule 26.12.2014    source источник
comment
Попробуйте изменить его на: dataGridView1.Rows.Add (new DataGridViewRow ());   -  person Sefa    schedule 26.12.2014
comment
Что вы имеете в виду, говоря, что последняя ячейка не работает только для чтения?   -  person Dan    schedule 26.12.2014
comment
Смотрите мой отредактированный ответ!   -  person TaW    schedule 26.12.2014


Ответы (1)


Это добавит Row тогда и только тогда, когда текущая ячейка является последней в DGV и пользователь нажимает Tab.

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

int yourLastColumnIndex = dataGridView.Columns.Count - 1;

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (dataGridView.Focused && keyData == Keys.Tab) &&
        if (dataGridView.CurrentCell.ColumnIndex == yourLastColumnIndex
            dataGridView.CurrentRow.Index == dataGridView.RowCount - 1)
        {
            dataGridView.Rows.Add();
            // we could return true; here to suppress the key
            // but we really want to move on into the new row..!
        }

    return base.ProcessCmdKey(ref msg, keyData);
}

Любая попытка использовать любое из ключевых событий DGV в конечном итоге оставит DGV вместо добавления Row ..

person TaW    schedule 26.12.2014