Выберите первую видимую ячейку новой строки в DataGridView - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь сфокусировать ввод и запустить событие редактирования в каждой новой строке, которую я добавляю в DataGridView в моей форме.

Это код, который я пытаюсь использовать для достижения этого пользователя.

Private Sub grd_GoldAdders_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles grd_GoldAdders.RowsAdded
        Dim grid As DataGridView = DirectCast(sender, DataGridView)

        grid.ClearSelection()

        If grid.Rows(e.RowIndex).Cells("grid_flag").FormattedValue = Constants.[New] Then

            For Each cell As DataGridViewCell In grid.Rows(e.RowIndex).Cells
                If Not cell.Visible Then Continue For
                grid.CurrentCell = cell 
                grid.BeginEdit(False)
                Exit For
            Next

        End If

    End Sub

"grid_flag" - это скрытая ячейка, которая используется для хранения пользовательских состояний для строки.

Перед добавлением строки, это то, что мы видим в форме: Before we add a new row.

Это то, что мы видим, когда на самом деле пытаемся добавить новую строку: Row Add button clicked.

Обратите внимание, что выбран столбец 0,0 и первый видимый столбец новой строки, но фокус столбца 0,0. Я не желаю, чтобы 0,0 выбрано или имело фокус. Я также вижу здесь, что индикатор строки тоже указывает на строку 0 ...

Вот как я хотел бы видеть вещи после нажатия на кнопку «Добавить»: Desired outcome from clicking the Add button.

Кто-нибудь знает, где я ошибаюсь с кодом? Я искал SO большую часть дня, пытаясь решить эту проблему.

1 Ответ

0 голосов
/ 30 ноября 2010

Вместо использования события RowAdded вашего DataGridView для установки CurrentCell, добавьте следующий код, куда бы вы ни добавляли новую запись в DGV (я полагаю, в событии Click вашей кнопки Add):

''# Add the new record to your Data source/DGV.

For Each row As DataGridViewRow In grd_GoldAdders.Rows
    If row.Cells("grid_flag").FormattedValue = Constants.[New] Then 
        grd_GoldAdders.CurrentCell = row.Cells("AssySiteColumn")  ''# I'm calling the first column in your DGV 'AssySiteColumn'.
        grd_GoldAdders.BeginEdit(False)
        Exit For
    End If
Next

Этот код просто перебирает все строки в вашем DGV и определяет в качестве CurrentCell первую ячейку в первой строке с вашим значением флага Constants.[New].

...