validation de données dans un DGV
Bonjour
Je sollicite encore une fois votre aide pour résoudre mon pb de validation de données
J'ai testé 2 solutions et une seule marche
1) Solution qui marche
Dans le formulaire 1 DGV et les 3 champs à coté dans des textBox
La saisie des données lors d’un ajout se fait dans les Texbox
Fonction enregistrement
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Private Sub Enregistrement()
If Validation() Then 'Test si la saisie est correcte
Me.RangementBindingSource.EndEdit()
Me.Validate()
Try
Me.TableAdapterManager.UpdateAll(Me.RangementDataSet)
txt_status.Text = ""
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Else
txt_status.Text = "Données non sauvegardées : les 2 champs doivent être remplis !"
End If
End Sub |
Fonction validation
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Private Function Validation() As Boolean
'Gestion des erreurs avant enregistrement
Dim HasNoError As Boolean = True
'EP1.Clear()
If txt_lib.Text.Length = 0 Then
HasNoError = False
End If
If txt_libCourt.Text.Length = 0 Then
HasNoError = False
End If
Return HasNoError
End Function |
2) Solution qui ne marche pas
Les textbox sont supprimées, l’ajout se fait dans le DGV
La fonction enregistrement reste la même
La fonction validation devient
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Private Function Validation() As Boolean
Dim HasNoError As Boolean = True
Dim row As RangementDataSet.RangementRow
row = CType(CType(Me.RangementBindingSource.Current, DataRowView).Row, RangementDataSet.RangementRow)
Dim RangementLib As String = row.RGM_LIB
Dim RangementLibCourt As String = row.RGM_LIB_COURT
If RangementLib.Length = 0 Then
HasNoError = False
End If
If RangementLibCourt.Length = 0 Then
HasNoError = False
End If
Return HasNoError
End Function |
Si je clique sur enregistrement alors que le focus est toujours sur la dernière colonne du DGV la valeur entrée n’est pas considérée et cause une erreur , mais ça je pense pouvoir le corriger en forçant le focus ailleurs lors du clic enregistrement
Si la valeur est nulle, elle n’est pas interceptée à temps car elle cause une erreur dans la partie
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _
Public Property RGM_LIB() As String
Get
Try
Return CType(Me(Me.tableRangement.RGM_LIBColumn),String)
Catch e As Global.System.InvalidCastException
Throw New Global.System.Data.StrongTypingException("La valeur pour la colonne 'RGM_LIB' dans la table 'Rangement' est DBNull.", e)
End Try
End Get
Set
Me(Me.tableRangement.RGM_LIBColumn) = value
End Set
End Property |
Comment gérer les erreurs dans un DGV ??
Par avance merci et bonne journée
Bertrand