Combobox

monopole Messages postés 44 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 29 janvier 2009 - 11 nov. 2008 à 02:57
monopole Messages postés 44 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 29 janvier 2009 - 12 nov. 2008 à 02:35
Bonjour,
je migre mes applications depuis le vb 6.0 vers le vb.net , j ai un petit problem avec un combobox qui ffiche les donnees corectement mais quand je valide ma commande sql j aimerai bien que les donnees s enregistre en temps que des newindex (( 0, 1 ou 2 )) mais pas le text  (( --select -- , conformes ou non conformes )), peut etre l un de vous peut m aider.

voila mon code en vb 6.0 :
==========================
Private Sub Filletat(ByVal Id)
    cmbetat.Clear
   
    cmbetat.AddItem "-- Select --"
    cmbetat.ItemData(cmbetat.NewIndex) = 0
   
    cmbetat.AddItem "Conformes"
    cmbetat.ItemData(cmbetat.NewIndex) = 1
   
    cmbetat.AddItem "Non Conformes "
    cmbetat.ItemData(cmbetat.NewIndex) = 2
         
    FindInData cmbetat, IIf(IsNull(Id), 0, Id)
   
End Sub
============================
le probleme qui existe c est que je n arrive pas a convertire le FindInData() :
=================================================
Private Sub FindInData(lst As Control, ByVal lData As Long)
Dim i As Long
   On Error GoTo ErrorRtn
   If lst.ListCount < 1 Then Exit Sub
   For i = 0 To lst.ListCount
       If i = lst.ListCount Then
           lst.ListIndex = -1
           Exit For
       End If
       If lst.ItemData(i) = lData Then
           If lst.ListIndex = i Then
               lst.ListIndex = -1
               lst.ListIndex = i
           Else
               lst.ListIndex = i
           End If
           Exit For
       End If
   Next i
ExitRtn:
   Exit Sub
  
ErrorRtn:
   GoTo ExitRtn
End Sub

3 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
11 nov. 2008 à 08:08
Bonjour,

déjà, ce que tu as écrit en VB6 est pour le moins surprenant !
Private Sub FindInData(lst As Control, ByVal lData As Long)
Dim i As Long
   On Error GoTo ErrorRtn ' je ne vois pas du tout quelle erreur est susceptible d'intervenir avec ce que tu veux ensuite faire
   If lst.ListCount < 1 Then Exit Sub
   For i = 0 To lst.ListCount
       If i = lst.ListCount Then
           lst.ListIndex = -1 ' il te suffirait de mettre ceci après le Next !
           Exit For  ' ben tu parles ! exit for ! bien itutile puisque to  lst.ListCount (qui devrait d'ailleurs être to lst.ListCount -  1
       End If
       If lst.ItemData(i) = lData Then
           ' Késako ???????? au bout du compte et dans tous les cas de figure : lst.listindex = i
           If lst.ListIndex = i Then 
               lst.ListIndex = -1
               lst.ListIndex = i
           Else
               lst.ListIndex = i
           End If
           Exit For
       End If
   Next i
 ' et alors là !!!!!! (c'est le pompon)

ExitRtn:  
   Exit Sub
  
ErrorRtn:
   GoTo ExitRtn
End Sub

Tu devrais commencer, avant de traduire en VB.Net, par revoir ce que tu as écrit là en VB6 !
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 nov. 2008 à 17:17
Bonjour,

Perso, je ne vois pas l'intérêt de faire une procédure... mais bon... à priori, j'aurai plutôt écris ceci :

Private Sub FindInData(lst As Control, ByVal lData As Long)
Dim i As Long<strike>
</strike>   For i = 0 To lst.ListCount
       If lst.ItemData(i) = lData Then
           lst.ListIndex = i
           Exit Sub
       End If
   Next i
lst.ListIndex = -1
End Sub

Amicalement,
Us.
0
monopole Messages postés 44 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 29 janvier 2009
12 nov. 2008 à 02:35
bonjour , merci de votre reponse mais j essaye d etre claire pour avoir votre aide , quand je fait la selection du combobox je valide la requete afin que les donnees seront enregistrer dans une table sql, j aimerai bien que les donnees inseret depuis le combobox seront les selectindex soit 0,1, ou 2 mais pas le texte afficher pour l utilisateur.
voila le probleme excactement  sur vb.net>>

=================





Private



Sub Filletat(ByVal Id)





cmbetat.Items.Clear()





cmbetat.Items.Add("-- Select --")






cmbetat.Items(cmbetat.SelectedIndex) = 0 





cmbetat.Items.Add("Conformes")





cmbetat.Items(cmbetat.SelectedIndex) = 1





cmbetat.Items.Add("Non Conformes Traites")





cmbetat.Items(cmbetat.SelectedIndex) = 2








FindInData(cmbetat, IIf(IsDBNull(Id), 0, Id))




End





Sub



==   a la ligne rouge je recois ce message d erreur :



InvalidArgument=Value of '-1' is not valid for 'index'. Parameter name: index

sachant que ma procedure est comme suivant :

Private

Sub FindInData(ByVal lst As Control, ByVal lData AsLong)Dim i AsLong




For i = 0 To
lst.DataBindings.Count




If lst.BindingContext.Contains(i) = lData Then



lst.TabIndex = i




Exit
Sub







End
If








Next

i



lst.TabIndex = -1




End
Sub




==============================
0
Rejoignez-nous