2009-08-16 4 views
1

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

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

+0

Привет, в какой-то мере я понимаю, что вы имеете в виду, но я не понимаю, почему вы должны использовать currentRow что вы whant сделать ти это? С наилучшими пожеланиями, Iordan – IordanTanev

+0

Я хочу заполнить ячейку текущей строки значением, когда пользователь нажимает кнопку. Если эта строка является новой строкой, эта строка должна быть создана, и ячейка должна быть заполнена значением. – Ruud

ответ

3

я подключил в случае CellClick с помощью следующего кода:

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

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

+0

Я думаю, что это сработает. Я попробую это как можно скорее. – Ruud

+0

В вашем решении есть один недостаток: когда пользователь меняет текущую ячейку, не щелкая, но используя клавиатуру, это не сработает. Событие CurrentCellChanged будет работать, но это не отправляет ячейку. – Ruud

+0

Тогда вам, вероятно, придется записывать нажатия клавиш и посмотреть, следует ли вам реагировать на «движение». Например, если это «стрелка вниз» рядом с последней строкой, это указывает (возможно?), Что пользователь пытается добавить строку. Затем вы можете выполнить те же шаги (включая новую запись и т. Д.), Как указано выше. –

0

Возможно ли решение этой проблемы решить вашу проблему?

dataGridView1.CurrentCell.RowIndex

+0

Нет, та же проблема с этим, я уже пробовал. – Ruud

0

Я использую событие 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; 
    } 
} 
Смежные вопросы