Обновление значений в представлении таблицы данных с помощью нажатия клавиши ввода данных в числовом режиме вверх и вниз - PullRequest
0 голосов
/ 22 февраля 2019

Я настраиваю представление таблицы данных, которое содержит список элементов, с одним столбцом в качестве номера элемента (1, 2, 3) и вторым номером в качестве имени элементов.Я управляю вводом столбца «Номер элемента», используя числовые значения «Вверх» и «Вниз», поэтому при его увеличении добавляются строки, и столбец «Номер элемента» автоматически обновляется (поэтому пользователю не нужно вводить это).Тем не менее, это работает, только если я использую цифры вверх и вниз, нажимая стрелки.Если я наберу число (скажем, 4 элемента), я получу исключение (System.ArgumentOutOfRangeException: «Индекс вышел за пределы диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс») ипроцедура не работаетКод ниже:

Private Sub numItemNumber_ValueChanged(sender As Object, e As EventArgs) Handles numItemNumber.ValueChanged
     While (dgvItems.Rows.Count < numItemNumber.Value)
        dgvItems.Rows.Add()
        i = numItemNumber.Value
        dgvItems.Rows(i).Cells(0).Value = i + 1  'This is where the exception is
    End While
   End Sub

Я добавил в событие KeyPress, чтобы посмотреть, может ли он обработать введенный элемент, но это не так.

 Private Sub numItemNumber_KeyPress(sender As Object, e As EventArgs) Handles numItemNumber.KeyPress
    For i = 0 To numItemNumber.Value - 1
        dgvItems.Rows(i).Cells(0).Value = i + 1
    Next
End Sub

Как я могу отредактировать это, чтобы включить оба события (пользователь использует клавиши вверх и вниз или просто вводит число непосредственно)?Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Понял, что это работает, по сути, добавив цикл по строкам представления сетки данных в событии Value Changed, чтобы он мог обрабатывать любое число> 0. Добавление кода здесь для всех, кому это возможно нужно:

Private Sub numItemNumber_ValueChanged(sender As Object, e As EventArgs) Handles numItemNumber.ValueChanged
 While (dgvItems.Rows.Count < numItemNumber.Value)
    For i=0 to numItemNumber.Value-1
         dgvItems.Rows.Add()
         dgvItems.Rows(i).Cells(0).Value = i + 1  
    Next
  End While
End Sub

Событие KeyPress не требуется.

0 голосов
/ 22 февраля 2019

Разве вам не нужно добавлять новую строку, прежде чем вы сможете ввести в нее значение?

Private Sub numItemNumber_KeyPress(sender As Object, e As EventArgs) Handles numItemNumber.KeyPress
For i = 0 To numItemNumber.Value - 1
    dgvItems.Rows.Add()
    dgvItems.Rows(i).Cells(0).Value = i + 1
Next

End Sub

...