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;
}
}