2010-11-30 4 views
0

Я пытаюсь сфокусировать ввод и запустить событие редактирования в каждой новой строке, которую я добавляю в DataGridView в моей форме.Выберите первую видимую ячейку новой строки в 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 либо выбирали, либо фокусировались. Я также вижу здесь, что индикатор строки указует на строке-тоже ...

Это, как я хотел бы видеть вещи после нажатия моей кнопки Добавить: Desired outcome from clicking the Add button.

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

ответ

0

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

''# 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].

+0

Это не будет работать, если строки отсортированы, поскольку последняя строка (численно) в сетке не может быть последней (хронологически) добавленной строкой. – Mike 2010-11-30 19:17:45

Смежные вопросы