2 pièce(s) jointe(s)
problème d'objets dans un datasource
Bonjour tout le monde.
J'ai un bug que je ne comprends pas...
C'est quelque chose qui marche bien plusieurs fois puis après une action précise, ça ne marche plus ^^.
Jetez d'abord un oeil à la pièce jointe (gui.jpg). Il s'agit d'un formulaire listant les différents devices (gsm, laptop et carte vpn) en possession d'un user. Il permet également d'en faire la gestion. (Formulaire qui s'intègre dans une application de user management).
Voici une sub qui est appelée lors de l'event CheckedChanged des RadioButton en haut de la form (cfr. pièce jointe).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
Private Sub InitGroupBox(ByVal device As String)
Select Case device
Case "rbGsm"
dgvDevice.DataSource = Nothing
dgvDevice.DataSource = user.Gsms
dgvDevice.Columns("SimCard").Visible = False
gbDelDevice.Text = "Retirer un gsm de ce user"
lblDelDevice.Text = "Liste des gsm's de ce user"
cbDelDevice.DataSource = Nothing
cbDelDevice.DisplayMember = "Imei"
cbDelDevice.ValueMember = "Imei"
cbDelDevice.DataSource = user.Gsms
gbAddDevice.Text = "Attribuer un gsm à ce user"
lblAddDevice.Text = "Liste des gsm's disponibles"
cbAddDevice.DataSource = Nothing
cbAddDevice.DisplayMember = "Imei"
cbAddDevice.ValueMember = "Imei"
cbAddDevice.DataSource = GsmDAO.GetFreeGsms()
gbEditDevice.Text = "Modifier un gsm de ce user"
lblEditDevice.Text = "Liste des gsm's de ce user"
cbEditDevice.DataSource = Nothing
cbEditDevice.DisplayMember = "Imei"
cbEditDevice.ValueMember = "Imei"
cbEditDevice.DataSource = user.Gsms
Case "rbLaptop"
dgvDevice.DataSource = user.Laptops
gbDelDevice.Text = "Retirer un laptop de ce user"
lblDelDevice.Text = "Liste des laptops de ce user"
cbDelDevice.DataSource = Nothing
cbDelDevice.DisplayMember = "Serial"
cbDelDevice.ValueMember = "Serial"
cbDelDevice.DataSource = user.Laptops
gbAddDevice.Text = "Attriber un laptop à ce user"
lblAddDevice.Text = "Liste des laptops disponibles"
cbAddDevice.DataSource = Nothing
cbAddDevice.DisplayMember = "Serial"
cbAddDevice.ValueMember = "Serial"
cbAddDevice.DataSource = LaptopDAO.GetFreeLaptops()
gbEditDevice.Text = "Modifier un gsm de ce user"
lblEditDevice.Text = "Liste des laptops de ce user"
cbEditDevice.DataSource = Nothing
cbEditDevice.DisplayMember = "Serial"
cbEditDevice.ValueMember = "Serial"
cbEditDevice.DataSource = user.Laptops
Case "rbVpn"
dgvDevice.DataSource = user.Vpns
gbDelDevice.Text = "Retirer un carte vpn de ce user"
lblDelDevice.Text = "Liste des cartes vpn de ce user"
cbDelDevice.DataSource = Nothing
cbDelDevice.DisplayMember = "Serial"
cbDelDevice.ValueMember = "Serial"
cbDelDevice.DataSource = user.Vpns
gbAddDevice.Text = "Attribuer une carte vpn à ce user"
lblAddDevice.Text = "Liste des cartes vpn disponibles"
cbAddDevice.DataSource = Nothing
cbAddDevice.DisplayMember = "Serial"
cbAddDevice.ValueMember = "Serial"
cbAddDevice.DataSource = VpnDAO.GetFreeVpns()
gbEditDevice.Text = "Modifier une carte vpn de ce user"
lblEditDevice.Text = "Liste des cartes vpn de ce user"
cbEditDevice.DataSource = Nothing
cbEditDevice.DisplayMember = "Serial"
cbEditDevice.ValueMember = "Serial"
cbEditDevice.DataSource = user.Vpns
End Select
End Sub |
Au load de la form, j'initialise les radiobutton avec
Code:
1 2 3 4
|
Private Sub frmDevices_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
rbGsm.Checked = True
End Sub |
Ce qui me pose problème ne concerne que les gsm's (rien n'est encore implémenté pour les autres devices). Cela marche très bien quand j'ajoute un gsm. Par contre, quand je retire un gsm du user, le gsm disparait bien du datagridview et l'update DB est correctement effectué mais il y a un manifestement un problème (voir pièce jointe prob.jpg). C'est pourtant le même code qui est exécuté à chaque fois.
Pourquoi est-ce que lors de la suppression, il ne m'affiche plus la liste encore existante ?
De plus, lorsque je clique sur le record du DataGridView, l'imei du gsm s'affiche bien dans la ComboBox. Il a donc bien la liste en DataSource. Mais lorsque je déroule la ComboBox, il y a toujours "UserManagement.Gsm" qui s'affiche plutot que la valeur attendue.
Bref, c'est la première fois que je travaille vraiment avec mes propres objets et je suis un peu perdu sur la manière de résoudre ce problème.
J'espère avoir été clair :-/
Merci d'avance,
Griftou.