2016-01-02 3 views
1

Я использовал функцию DataGridView в форме, имеющей 4 столбца: Код товара, Описание, Количество, Цена. Я хочу, когда код элемента вставляется в ячейку, фокус должен перемещаться по третьей ячейке той же строки, что и третий столбец (количество). До сих пор он работал отлично, потому что я ссылался на эту ссылку.DataGridView SetFocus не перемещается в следующую строку

DataGridView SetFocus after CellEndEdit

Теперь проблема в том, что он застрял на 3-й камере, он не движется к следующей строке первого столбца (Код товара), когда я нажимаю войти. Мой код

Private flag_cell_edited As Boolean 
Private currentRow As Integer 
Private currentColumn As Integer 


Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit 
     flag_cell_edited = True 
     currentColumn = e.ColumnIndex 
     currentRow = e.RowIndex 
     MsgBox(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) 

End Sub 


Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged 
     If flag_cell_edited Then 
       DataGridView1.CurrentCell = DataGridView1.Rows(currentRow).Cells(2) 
       flag_cell_edited = False 
     End If 
End Sub 

Я использовал MsgBox, чтобы просмотреть данные, вставленные в камеру, чтобы потом можно хранить его в базу данных.

+0

Начните удаление этого MsgBox. Эта линия взаимодействует с нормальным потоком фокуса между элементами управления. Используйте простую консоль Convert.WriteLine, чтобы наблюдать за resul в окне отладки. – Steve

+0

Я удалил эту строку, но все же она не работает. Когда первый фокус фокуса перемещается в 3-я ячейка (т.е. количество), и я вставляю какое-то значение и HIT вводят так, что ничего не происходит, и фокус остается в одной и той же ячейке, но когда я HIT вводят второй раз, он переходит к следующей строке 3-го столбца (т.е. количество) –

ответ

0

Когда вы нажимаете enter в третьей ячейке, вы получаете событие CellEndEdit, например, когда вы заканчиваете редактирование в первой ячейке. Вам необходимо вызвать движение на третьей ячейке только тогда, когда вы находитесь на первом

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit 

    if e.ColumnIndex = 0 Then 
     flag_cell_edited = True 
     currentColumn = e.ColumnIndex 
     currentRow = e.RowIndex 
    Else 
     flag_cell_edited = False 
    End If 
End Sub 


Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged 
    If flag_cell_edited Then 
     DataGridView1.CurrentCell = DataGridView1.Rows(currentRow).Cells(0) 
     flag_cell_edited = False 
    End If 
End Sub 
+0

Спасибо Стив, он работает немного, но когда я нажимаю кнопку ввода в третьей ячейке, он переходит к следующей ячейке Next Row, она должна перейти к следующей ячейке первой строки. –

+0

Просто измените, что 2 в 0 – Steve

+1

Я инициализировал другую переменную с именем flag_cell_edit1 и ввел в оба события цикл if так же, как flag_cell_edit, он работал. Вот немного изменить, что я сделал в SelectionChanged случае: % \t Если flag_cell_edited1 Тогда DataGridView1.CurrentCell = DataGridView1.Rows (currentRow + 1) .Cells (0) flag_cell_edited1 = False End If % Большое спасибо @steve за помощь, я отредактировал ваш код, и он сработал! Спасибо чувак! –

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