Bonjour,
J'initialise des combox box à l'aide
1 2 3
| For i As Integer = 0 To dtSAF.Rows.Count - 1
Fam.Items.Add(New ListItem(dtSAF.Rows(i).Item("SAF_Code"), dtSAF.Rows(i).Item("SAF_Code") + " - " + dtSAF.Rows(i).Item("SAF_FamilyProd")))
Next |
et la classe suivante
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Public Class ListItem
Public Value As Object
Public Text As String
Public Sub New(ByVal NewValue As Object, ByVal NewText As String)
Value = NewValue
Text = NewText
End Sub
Public Overrides Function ToString() As String
Return Text
End Function
End Class |
Cela fonctionne très bien.
Par contre lorsque je parcours la table de la base de donnée, je replis les combobox avec la valeur de la table.
J'ai ajouter la procédure suivante pour afficher le code et le libellé dans le combobox.
1 2 3 4 5 6 7 8
| Private Sub Fam_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Fam.TextChanged
If Me.Fam.FindString(Me.Fam.Text, 0) > 0 Then
Dim Pos As Int32 = Me.Fam.Text.Length
Me.Fam.SelectedIndex = Me.Fam.FindString(Me.Fam.Text)
Me.Fam.SelectionStart = Pos
Me.Fam.SelectionLength = Me.Fam.Text.Length - Pos
End If
End Sub |
Mon problème est que lorsque je parcours la table j'ai souvent 2 fois la même valeur dans un combox, et la l'affichage ne se fait plus je n'ai plus que le code sans le libellé.
J'ai tenter de d'affecter une valeur bidon avant la valeur de la table cela ne marche pas,
1 2
| Me.Fam.Text = "z"
Me.Fam.Text = verifnull(dtKE30.Rows(row).Item("IK3_pf")) |
j'ai aussi modifié
1 2 3
| If Me.Fam.FindString(Me.Fam.Text)
par
If Me.Fam.FindString(Me.Fam.Text, 0) |
mais rien n'y fait, lorsque le code du combo est le même entre les lignes de la table cela ne marche pas.
Cela me provoque aussi une erreur lors de l'enregistrement des données dans la table
drKE30("IK3_pf") = CType(Me.Fam.SelectedItem, ListItem).Value
Si quelqu'un a une solution
Merci
Tornade
Partager