Gestion focus dans un datagrid
Bonjour à tous,
Voici mon problème :
Je fais de l'encodage dans une colonne précise d'un datagrid et je fais un test de valeur de cette colonne qui ne peut dépasser un maximum ... Si ce maximum est dépassé, je souhaite garder le focus sur la même colonne dans la même ligne ... pour empêcher la saisie de l'info suivante ....
Voici les code utilisé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Private Sub dgvPointsTmp3_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgvPointsTmp3.CellValueChanged
Dim Test As Integer = dgvPointsTmp3.Rows(e.RowIndex).Cells(8).Value
Dim Max As Integer = dgvPointsTmp3.Rows(e.RowIndex).Cells(9).Value
Select Case Test
Case 0
Dim result As DialogResult = MessageBox.Show("Eleve absent ?", "Attention !", MessageBoxButtons.YesNo)
If result = DialogResult.Yes Then
dgvPointsTmp3.Rows(e.RowIndex).Cells(10).Value = True
Exit Sub
Else
Exit Select
End If
dgvPointsTmp3.Update()
Case > Max
MessageBox.Show("Cote erronée > '" & Max & "'", "Attention !")
Dim rowNumber As Integer = (e.RowIndex + 1)
Dim cellNumber As Integer = 8
dgvPointsTmp3.CurrentCell = dgvPointsTmp3(cellNumber, rowNumber)
Exit Select
End Select
End Sub |
En cas de dépassement du maximum, après affichage de la messagebox, le focus est donné à la bonne cellule mais dans la ligne suivante ...
Quelqu'un a-t'il une idée pour résoudre le problème ???
D'avance, merci
3 pièce(s) jointe(s)
windows.forms.datagridview.cellvalidating
Citation:
Envoyé par
popo
Bonjour Popo,
suite à votre conseil, j'ai gambergé sur "datagridview.cellvalidating" mais sans succès : le pointeur d'écriture se déplace toujours sur la row suivante ...
Voici le code utilisé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
Private Sub dgvPointsTmp3_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles dgvPointsTmp3.CellValidating
Dim Max As String = dgvPointsTmp3.Rows(e.RowIndex).Cells(9).Value.ToString
Dim rownuber1 As Integer = (e.RowIndex)
If dgvPointsTmp3.CurrentCell.ColumnIndex = 8 Then
If dgvPointsTmp3.Rows(rownuber1).Cells(8).FormattedValue > Max Then
MessageBox.Show(dgvPointsTmp3.Rows(e.RowIndex).ErrorText = "La cotation dépasse le maximum")
e.Cancel = True
End If
End If
End Sub |
plus images du résultat et du debugging
Pièce jointe 615361
Pièce jointe 615362
Pièce jointe 615363
Dans ce cas, le test "If dgvPointsTmp3.Rows(rownuber1).Cells(8).FormattedValue" n'est jamais validé !!!
Une autre idée ???