Je continue ma découverte de VB, donc je risque de vous embêter avec des choses qui vous paraissent évidentes ... Je tiens à préciser que j'ai fais une recherche sur le forum et je n'ai rien trouvé pour mon problème...
Avant d'expliquer la chose je vous joins un screenshot qui est beaucoup plus explicite.
Maintenant je vous explique. Grâce à ma listbox je récupère le champ "nom" d'une base de données Access, grâce à ce champs qui est la clé primaire de la table je récupère les autres champs dans des textbox afin de pouvoir les modifier. Sur le clic du bouton valider il n'y a modification que du champs "Nom"...
Mais pourquoi ? Les deux autres champs dans la table se nomme bien "Prenom" et "Datenaissance"
Je vous joins le code de mon bouton "valider"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
'Si on est en ajout
If Button3.Enabled = False Then
'Divers contrôls d'erreurs
If Me.TextBox1.Text = "" Then
MsgBox("Veuillez saisir le nom.", MsgBoxStyle.OkOnly Or _
MsgBoxStyle.Information, "Erreur")
Exit Sub
End If
If Me.TextBox2.Text = "" Then
MsgBox("Veuillez saisir le prénom.", MsgBoxStyle.OkOnly Or _
MsgBoxStyle.Information, "Erreur")
Exit Sub
End If
If Not MaskedTextBox1.MaskFull Then
MsgBox("Date incorrecte. Vérifier la date", _
MsgBoxStyle.OkOnly Or MsgBoxStyle.Information, "Erreur")
Exit Sub
End If
dtr = ObjetDataSet.Tables("Personne").NewRow()
dtr("Nom") = Me.TextBox1.Text
dtr("Prenom") = Me.TextBox2.Text
dtr("Datenaissance") = Me.MaskedTextBox1.Text
ObjetDataSet.Tables("Personne").Rows.Add(dtr)
'Pour modifier les valeurs changées dans le DataAdapter
cmdb = New OleDbCommandBuilder(ObjetDataAdapter)
'Mise à jour
ObjetDataAdapter.Update(ObjetDataSet, "Personne")
'On vide le DataSet et on le 'recharge' de nouveau.
ObjetDataSet.Clear()
ObjetDataAdapter.Fill(ObjetDataSet, "Personne")
ObjetDataTable = ObjetDataSet.Tables("Personne")
Button3.Enabled = True
Button4.Visible = True
End If
'si on est en Modification
If Button4.Enabled = False And Button3.Visible = False Then
Dim choix As String
choix = ListBox1.Text
rownum = ListBox1.SelectedIndex
MessageBox.Show(rownum)
If MsgBox("Confirmer la modification de la personne " & choix _
& " ?", MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton1 Or _
MsgBoxStyle.Question, "Confirmation") = MsgBoxResult.Yes Then
'Divers contrôls d'erreurs
If Me.TextBox1.Text = "" Then
MsgBox("Veuillez saisir le nom.", MsgBoxStyle.OkOnly Or _
MsgBoxStyle.Information, "Erreur")
Exit Sub
End If
If Me.TextBox2.Text = "" Then
MsgBox("Veuillez saisir le prénom.", MsgBoxStyle.OkOnly _
Or MsgBoxStyle.Information, "Erreur")
Exit Sub
End If
If Not MaskedTextBox1.MaskFull Then
MsgBox("Date incorrecte. Vérifier la date", _
MsgBoxStyle.OkOnly Or MsgBoxStyle.Information, "Erreur")
Exit Sub
End If
' Extraire l'enregistrement courant
dtr = ObjetDataSet.Tables("Personne").Rows(rownum)
'Modifier les valeurs des champs en récupérant le contenu des _
TextBox
dtr("Nom") = Me.TextBox1.Text
dtr("Prenom") = Me.TextBox2.Text
dtr("Datenaissance") = Me.MaskedTextBox1.Text
'Pour modifier les valeurs changées dans le DataAdapter
cmdb = New OleDbCommandBuilder(ObjetDataAdapter)
'Mise à jour
ObjetDataAdapter.Update(ObjetDataSet, "Personne")
'On vide le DataSet et on le 'recharge' de nouveau.
ObjetDataSet.Clear()
ObjetDataAdapter.Fill(ObjetDataSet, "Personne")
ObjetDataTable = ObjetDataSet.Tables("Personne")
'ObjetConnection.Close()
Button3.Visible = True
Button4.Enabled = True
TextBox1.Enabled = False
TextBox2.Enabled = False
MaskedTextBox1.Enabled = False
End If
End If
End Sub
je récapitule :
- lorsque j'ajoute une nouvelle personne tout est ok
- lorsque je modifie, je me retrouve donc avec un seul champs mis à jour, "nom".
- Si j'inverse et met par exemple le prénom en premier alors celui ci sera modifié et plus le nom ... Vous me suivez ? pourquoi ? :(
Question bonus :D
si je veux trier ma liste par ordre ma technique ne fonctionne plus une autre méthode à me suggérer sans pour autant modifier tout le formulaire ... Enfin cela n'est pas mon principal problème
Merci
PS : Je vous ai tout fournis à part les boutons ajout modif et quitter qui ne présentent pas selon moi grand intérêt. Veuillez m'excuser pour la longueur du post et s'il s'agit d'erreurs grotesques, je débute soyez indulgents merci
Bon bah après un gros monologue de ma part, et une bonne journée de recherche, j'ai testé un truc tout bête ...
dim nom, prenom, naissanceas string
nom = Textbox1.text
prenom = Textbox2.text
naissance = MaskedTextbox1.text
....
....
dtr("Nom") = nom
dtr("Prenom") = prenom
dtr("Datenaissance") = naissance
Et maintenant ca marche ...
S'agit il d'un bug ? ou est-ce moi qui ai mal fait precedement en affectant directement sans passer par une variable ?
Parfois c'est quand même bete vb !
Ca m'a tout l'air d'être un bug... je vois pas la différence que çà fait... Soit c'est un truc propre à VB... et du coup je connais pas (fais du C# moi ), soit c'est un bug.
Tu as fait la modif où ? dans le If Button3 ? dans le If Button4 ? Les deux ?
Enfin bon, si çà marche, tant mieux.
__________________________
Sujet résolu ? Pensez à mettre le tag
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.