ComboBox associer une valeur à une ligne [Résolu]

dimdidi 26 Messages postés mercredi 20 juillet 2005Date d'inscription 18 juillet 2006 Dernière intervention - 28 nov. 2005 à 09:52 - Dernière réponse : cs_gilou33 15 Messages postés vendredi 7 novembre 2003Date d'inscription 29 février 2008 Dernière intervention
- 17 févr. 2006 à 18:35
Bonjour,

Je voudrais dans une ComboBox pouvoir associé une valeur en fonction de la ligne selectionnée
ex :
Base de donnee
ID -> Valeur
5 -> Toto
10 -> Tata
12 -> Tutu

dans la ComboBox
ComboBox1.Items.Insert(0,'Toto');
ComboBox1.Items.Insert(1,'Tata');
ComboBox1.Items.Insert(2,'Tutu');

Quand je sélectionne "Tata" je voudrais récuperer la valeur "10"

En comparaison, ce que cela ferais en HTML
<select>
<option value='5'>Toto</option>
<option value='10'>Tata</option>
<option value='12'>Tutu</option>
</select>

Si vous avez des idées ...

J'ai essayer avec ComboBox1.Items.InsertObject

Merci d'avance


Dimdidi
Afficher la suite 

14 réponses

Répondre au sujet
dominique.stock 446 Messages postés vendredi 7 novembre 2003Date d'inscription 8 octobre 2008 Dernière intervention - 28 nov. 2005 à 14:45
+3
Utile
Bonjour,
Il faut utiliser la propriété Object de ton item :
Pour affecter la valeur "i" par exemple:

Combobox1.AddItem("Toto",TObject(i));

Pour la récuperer :

integer(Combobox1.items.objects[Combobox1.itemindex]) .... (= i)

Dom
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dominique.stock
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 28 nov. 2005 à 16:24
+3
Utile
Essaye ceci j'ai testé et ca fonctionne

Pour écrir:
procedure TForm1.Button2Click(Sender: TObject);
Function AddObject(s: String):TObject;
Begin
Result := TObject(LongInt(s));
End;
begin
Combobox1.AddItem('Toto',AddObject('DelphiFr c''est Cool'));
end;


Pour lire:
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(String(Combobox1.items.objects[Combobox1.itemindex]));
end;
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
cs_deubal 198 Messages postés mercredi 26 novembre 2003Date d'inscription 26 août 2009 Dernière intervention - 28 nov. 2005 à 10:48
0
Utile
pourquoi ne pas faire une requete qui recupere le id selon la ligne selectionné dans la combo ??
ca donnerait un truc du style : 'select id from tatable where valeur like ' +quotedstr(tacombo.text + '%');
// j'ai mis like et % car les utilisateurs peuvent normalement saisir juste le debut d'un mot dans ta combo. la requete recherhce alors sur le dubut du mot.
Voili, voilou, a toi de voir si ca correspond a ton besoin
Commenter la réponse de cs_deubal
dimdidi 26 Messages postés mercredi 20 juillet 2005Date d'inscription 18 juillet 2006 Dernière intervention - 28 nov. 2005 à 11:27
0
Utile
Merci pour la réponse
mais cela ne me convient pas
Pour plusieurs raisons :
-Cela implique d'interroger plusieurs fois la base de donnee
Il aller d'abord chercher l'id dans une table pour l'inserer dans une autre table
-Il peux avoir 2 meme texte pour 2 id différents (c'est idiot mais ca peux arriver)


Dimdidi
Commenter la réponse de dimdidi
cs_deubal 198 Messages postés mercredi 26 novembre 2003Date d'inscription 26 août 2009 Dernière intervention - 28 nov. 2005 à 12:55
0
Utile
excuz si ca ne convient pas...
y a pas la possibilité de mettre 2 colonnes dans ta combo et comme ca l'id correspond à la seconde colonne de l'item selectionné ?

sinon au chargement de ta combo tu créé un tableau de 3 colonnes contenant :
id - valeur - itemindex
quand une valeur est selectionné tu recup l'id via l'itemindex...

a voir si cela conviendrait mieux
Commenter la réponse de cs_deubal
dimdidi 26 Messages postés mercredi 20 juillet 2005Date d'inscription 18 juillet 2006 Dernière intervention - 28 nov. 2005 à 14:08
0
Utile
Merci encore pour la réponse
Cela me conviens mieux (désolé, si je suis difficile )
Mais je cherche une fonctionnalité sur la ComboBox qui me permet d'associé valeur en m'evitant de creer un tableau ou instancier un objet.

J'ai aussi pensé
TInfo=class(TObject)
sValeur
end;
info=Tinfo.create;
info.sValeur='1';
ComboBox1.Items.insertObjet(0,'tata',info);

Aussi
ComboBox1.Items.add(0,'tata=1')
showmessage(ComboBox1.Items.names[0]);
showmessage(ComboBox1.Items.ValueFromIndex[0]);
Cela me conviendrais mais à l'affichage on affiche dans la liste 'tata=1'

Si vous avez des idées ...

Dimdidi
Commenter la réponse de dimdidi
dimdidi 26 Messages postés mercredi 20 juillet 2005Date d'inscription 18 juillet 2006 Dernière intervention - 28 nov. 2005 à 15:08
0
Utile
Merci pour la réponse

Ca me conviens.

Le souci c'est que cela ne fonctionne pas si tu essaye avec un string (Pb à la récupartion des donnée) ! pourquoi ? (faut passer par l'objet string ?)

ComboBox1.AddItem('toto',TObjet('p'))

showmessage(string(ComboBox1.items.objects[combobox1.itemindex]))
// Affiche n'importe quoi

Mais si il y a d'autre solution ...


Dimdidi
Commenter la réponse de dimdidi
dominique.stock 446 Messages postés vendredi 7 novembre 2003Date d'inscription 8 octobre 2008 Dernière intervention - 28 nov. 2005 à 15:12
0
Utile
En fait,
Cela ne fonctionne avec une string si les strings que tu as mis dans l'objet sont toujours en mémoire, cela revient à créer un tableau de string , affecter chaque ligne du tableau comme objet à ton combobox, et de ne pas détruire ce tableau le temps de l'utilisation du combobox ...
Je ne connais pas le pourquoi du comment, mais c'est la seule façon que j'avais trouvé pour le faire ...

Dom
Commenter la réponse de dominique.stock
dimdidi 26 Messages postés mercredi 20 juillet 2005Date d'inscription 18 juillet 2006 Dernière intervention - 28 nov. 2005 à 15:35
0
Utile
Excuse moi,
mais est ce que tu peux etre un peu plus clair.
Quand tu dis que le String doit etre en memoire comment faire ?


Dimdidi
Commenter la réponse de dimdidi
dominique.stock 446 Messages postés vendredi 7 novembre 2003Date d'inscription 8 octobre 2008 Dernière intervention - 28 nov. 2005 à 15:40
0
Utile
Désolé:
C-a-d:
définir une variable style TStringList en global,

Y mettre les valeurs auxquelles tu veux associer ton combobox
Liste:=TStringList.create;

Liste.add('titi');
....

Combobox1.additem('toto',Tobject(Liste[0]));

Tant que ta variable Liste existera, tu pourras récupérer ton
String(Combobox1.items.objects[Combobox1.itemindex]) correctement.

Dom
Commenter la réponse de dominique.stock
dimdidi 26 Messages postés mercredi 20 juillet 2005Date d'inscription 18 juillet 2006 Dernière intervention - 29 nov. 2005 à 08:24
0
Utile
Merci Dominique,
Pour un string comme valeur avec une stringlist.
Le souci est que c'est difficile si on ajoute des lignes dans la comboBox.

Merci Cirec,
J'ai testé ton programme et ca marche.
Mais ne risquons pas d'avoir un souci si le string(la chaine de caractère) depasse la taille memoire d'un longInt ...

Merci à tous d'avoir répondu à ma question et de m'avoir proposé des soluions.


Dimdidi
Commenter la réponse de dimdidi
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 29 nov. 2005 à 11:51
0
Utile
Dimdidi,
oui absolument à partir d'une certaine longueur ca doit poser problème
mais j'ai testé sur 11 ajouts ( 11 X ) le texte qui suit et jusque là pas de souscis

Combobox1.AddItem('Toto',AddObject('DelphiFr c''est Cool 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20'+#13+
'DelphiFr c''est Cool 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40'+#13+
'DelphiFr c''est Cool 41 42 43 44 45 46 47 48 49 40 51 52 53 54 55 56 57 58 59 60'+#13+
'DelphiFr c''est Cool 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80'+#13+
'DelphiFr c''est Cool 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100'+#13+
'DelphiFr c''est Cool 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120'+#13+
'DelphiFr c''est Cool 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140'+#13+
'DelphiFr c''est Cool 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160'+#13+
'DelphiFr c''est Cool 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180'+#13+
'DelphiFr c''est Cool 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200'+#13+
'DelphiFr c''est Cool 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220'+#13));

ce qui nous laisse quand même de quoi faire non


@+
Cirec
Commenter la réponse de Cirec
cs_gilou33 15 Messages postés vendredi 7 novembre 2003Date d'inscription 29 février 2008 Dernière intervention - 17 févr. 2006 à 18:34
0
Utile
d

dddddd
dddddddddddddddddddddd
Commenter la réponse de cs_gilou33
cs_gilou33 15 Messages postés vendredi 7 novembre 2003Date d'inscription 29 février 2008 Dernière intervention - 17 févr. 2006 à 18:35
0
Utile
oups désolé, merci de supprimer ces messages c'est une erreur de ma part.
Commenter la réponse de cs_gilou33

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.