DataGridView CurrentRow исключает новую строку

Я хочу получить индекс текущей строки моего DataGridView. Проблема в том, что если текущая строка является новой строкой, CurrentRow устанавливается на последнюю строку, которая не является новой строкой. Я не могу проверить, какие строки будут выбраны, потому что, если выбрана строка, это не означает, что это текущая строка, а текущая строка не обязательно выбрана.

Я могу получить индекс новой строки, но как я могу узнать, является ли новая строка текущей строкой?

3 ответа

Решение

Я подключился к событию CellClick с помощью следующего кода:

private void uiEntries_CellClick(object sender, DataGridViewCellEventArgs e)
{
    Console.WriteLine(e.RowIndex == uiEntries.NewRowIndex);
}

Когда это условие истинно, пользователь "выбрал" новую строку. Основываясь на этой информации, вам может потребоваться вставить новую запись (используя метод..Rows.Add()), прежде чем вы сможете что-либо с ней сделать, поскольку новая строка в действительности не существует в коллекции; это просто как заполнитель для представления новой строки.

Может ли это свойство решить вашу проблему?

dataGridView1.CurrentCell.RowIndex

Я использую событие CellEnter, чтобы сохранить CurrentCell.RowIndex в переменную формы. Нажатие на другую кнопку заставляет это событие срабатывать с последним существующим индексом строки вместо нового индекса строки, который нам нужен, чтобы проверить фокус, чтобы игнорировать этот случай.

Это избавляет от необходимости проверять все возможные действия клавиш и мыши, которые могут переместить курсор в новую строку, как вы делаете с событием CellClick.

Код автоматически конвертируется из VB:

private int ActualCurrentRowIndex;

private void DataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
    if (DataGridView1.Focused) {
        ActualCurrentRowIndex = DataGridView1.CurrentCell.RowIndex;
    }
}
Другие вопросы по тегам