2015-10-06 5 views
0

Мне нужно проверить, что значение в определенной ячейке моего datagridview находится в пределах определенного диапазона (0 - 99.9999), а если нет, отмените редактирование пользователя. Я до сих пор проверяю столбец, что он является двойным типом данных и что он равен 0. Это работает. Но теперь мне нужно проверить каждую конкретную ячейку в этом столбце, так как все они должны быть проверены для определенных числовых диапазонов. Каждая ячейка будет иметь другой диапазон значений, которые она может принять.Подтвердить значение конкретной ячейки

Private Sub dgvPidVals0_cellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles dgvPidVals0.CellValidating 
    'Me.dgvPIDStatus0.Rows(e.ColumnIndex).ErrorText = "" 
    Dim newDouble As Double 

    Select Case e.ColumnIndex 
     Case 1 
      If Not Double.TryParse(e.FormattedValue.ToString(), newDouble) OrElse newDouble < 0 Then 
       e.Cancel = True 
       MessageBox.Show("PID Parameters values must be non-negative numeric values only!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
       dgvPidVals0.CancelEdit() 

       If dgvPidVals0.Rows(5).Cells(1).Value > 99.9999 Then 
        e.Cancel = True 
        MessageBox.Show("Output Filter Value must be less than 100.0!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
        dgvPidVals0.CancelEdit() 
       End If 

      End If 
    End Select 
End Sub 
+0

Где вы сейчас застряли? Что вы пробовали? Какой у Вас вопрос...? –

ответ

0

Tez, я уже пробовал этот точный код, и он не работает. Я в тупике, почему нет. Первая инструкция If кода работает нормально. Часть Else If не работает. Я пробиваю значение, превышающее 100 в ячейке DGV, и требуется (когда это не должно). Затем я снова нажимаю на форму и появляется окно «Сообщение». Я ничего не могу сделать в этот момент, так как каждый щелчок DGV заставит окно сообщений появиться. В конце концов, я использовал обработчик события CellEndEdit, чтобы проверить, что значения в каждой из ячеек, которые я оцениваю, попадают в определенный диапазон. Это взломанный способ сделать это, я думаю, и я думаю, что есть лучший, более чистый способ сделать это. Но ... это работает. Все еще открыт для ответов от других о том, что делать или если использование события CellEndEdit является фактическим способом его выполнения.

Private Sub dgvPidVals0_CellEndEdit(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dgvPidVals0.CellEndEdit 

    If dgvPidVals0.Rows(0).Cells(1).Value > 6.14 Then 
     dgvPidVals0.Rows(0).Cells(1).Value = axis0Parameters(61) 'Load previous value into the cell 
     MessageBox.Show("Proportional Gain Value must be <= 6.14!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End If 

    If dgvPidVals0.Rows(1).Cells(1).Value > 58.94 Then 
     dgvPidVals0.Rows(1).Cells(1).Value = axis0Parameters(62) 
     MessageBox.Show("Integral Gain Value must be <= 58.94!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End If 

    If dgvPidVals0.Rows(2).Cells(1).Value > 0.1753 Then 
     dgvPidVals0.Rows(2).Cells(1).Value = axis0Parameters(63) 
     MessageBox.Show("Differential Gain Value must be <= 0.1753!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End If 

    If dgvPidVals0.Rows(3).Cells(1).Value > 5 Then 
     dgvPidVals0.Rows(3).Cells(1).Value = axis0Parameters(64) 
     MessageBox.Show("Feed Forward Value must be <= 5!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End If 

    If dgvPidVals0.Rows(4).Cells(1).Value > 1.5 Then 
     dgvPidVals0.Rows(4).Cells(1).Value = axis0Parameters(65) 
     MessageBox.Show("Rate Feed Forward Value must be <= 1.5!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End If 

    If dgvPidVals0.Rows(5).Cells(1).Value > 100 Then 
     dgvPidVals0.Rows(5).Cells(1).Value = axis0Parameters(39) 
     MessageBox.Show("Output Filter Value must be <= 100.0!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End If 

    slider1.Value = dgvPidVals0.Item(1, 0).Value 
    slider2.Value = dgvPidVals0.Item(1, 1).Value 
    slider3.Value = dgvPidVals0.Item(1, 2).Value 
    slider4.Value = dgvPidVals0.Item(1, 3).Value 
    slider5.Value = dgvPidVals0.Item(1, 4).Value 
    slider6.Value = dgvPidVals0.Item(1, 5).Value 
End Sub 
Смежные вопросы