Value del comboBox

09/04/2007 - 16:38 por Jennifer | Informe spam
Buenas!!!

¿El ComboBox tiene un value?
¿Como se lo pongo?

ComboBox1.Items.Add("Texto");

Gracias.

Preguntas similare

Leer las respuestas

#6 ANT1
13/04/2007 - 12:14 | Informe spam
Ya puestos, y como ha dicho Francisco, da gusto encontrase hilos por
estos foros donde la gente comenta problemas que uno en algun momento
se ha planteado y que por falta de tiempo no ha podido solucionar.

Yo tambien dedique un tiempo a mirar como rellenar un combobox con
parejas de valores string y string para que en el combo apareciese un
string identificador, por llamarlo de alguna manera, y a la hora de
trabajar con ello se accediese al segundo string, o lo que llamais
vosotros "value".

Para poneros mas en situacion seria un combo con propiedades de una
Base de datos (por ejemplo "Nombre" y "Apellidos") y que cuando
seleccionases uno se trabajase directamente con el nombre (el value)
asignado en la BD SQL (por ejemplo "NOM" y "APLL").

La solucion que dais seria perfecta. Eliminando un monton de lienas de
codigo de mi app en la que hago comparaciones if estupidas para que
dependiendo del string seleccionado use otro.

Mi pregunta a todo esto es ¿no os habeis planteado usar Dictionary?.
Te permiten la creacion de pares de identificador-valor de los tipos
que quieras, string-string o como en vuesto caso string-int. Y en
principio fue la solucion que empece a mirar, pero lo deje porque no
sabia como indicar al combo que sacase por pantalla concretamente el
identificador y que a la hora de la verdad trabajase con el valor.

Ahora, y leyendo este hilo, se me ocurre crear tu propia clase que
herede de dictionary a la que basicamente habria que generar un
override del ToString(), como haceis vosotros, y un metodo GetValue()
para sacar el valor.

Escribiendo este mismo comentario me estoy dando cuenta que las lineas
de codigo que se ahorrarian serian minimas, la verdad. Incluso seria
mas sencillo y menos complejo hacerlo a vuestra manera. Aun asi me
gustaria saber que opinais respecto a lo que comento.

Un saludo.
Respuesta Responder a este mensaje
#7 ANT1
13/04/2007 - 12:47 | Informe spam
Siguiendo pensando...

En el codigo de tu programa podrias poner para definir el diccionario:


Dictionary<string, int> diccionario = new Dictionary<string, int>();

diccionario.Add("Uno",1);
diccionario.Add("Dos",2);
diccionario.Add("Tres",3);
// Asi hasta que te aburras

foreach(KeyValuePair<string, int> kvp in diccionario)
{
miComboBox.Items.Add(kvp.Key);
}
// Siendo "miComboBox el combo que quieres rellenar


Y ya en el evento manejador de cuando tu combobox cambie o cuando
hagas lo que tengas que hacer con el valor seleccionado (al pulsar un
boton, intro o cuando sea):

int ValorRecuperado = diccionario[MiComboBox.SelectedItem];


O algo asi que lo he hecho todo de memoria.

¿Que os parece?
Respuesta Responder a este mensaje
#8 Hernan
13/04/2007 - 19:35 | Informe spam
En el codigo de tu programa podrias poner para definir el diccionario:

Dictionary<string, int> diccionario = new Dictionary<string, int>();

diccionario.Add("Uno",1);
diccionario.Add("Dos",2);
diccionario.Add("Tres",3);
// Asi hasta que te aburras

foreach(KeyValuePair<string, int> kvp in diccionario)
{
miComboBox.Items.Add(kvp.Key);}

// Siendo "miComboBox el combo que quieres rellenar

Y ya en el evento manejador de cuando tu combobox cambie o cuando
hagas lo que tengas que hacer con el valor seleccionado (al pulsar un
boton, intro o cuando sea):

int ValorRecuperado = diccionario[MiComboBox.SelectedItem];

O algo asi que lo he hecho todo de memoria.

¿Que os parece?



Está bien, pero el problema es que duplicas la colección
de elementos. Es el inconveniente de usar .Items.

Podrías usar .DataSource pero en este caso te exige que
la fuente de datos implemente de IList, lo que deja afuera
a Dictionary :(

-H.
Respuesta Responder a este mensaje
#9 ANT1
16/04/2007 - 09:39 | Informe spam
Está bien, pero el problema es que duplicas la colección
de elementos. Es el inconveniente de usar .Items.



En eso tienes toda la razon. Aunque solo se duplicaria el key de cada
objeto añadido al dictionary. Por eso tambien defino primero el
idictionary y a partir de el el combobox, para no tener que añadir por
duplicado el key a ambos, asegurando que tienen los mismos.

Podrías usar .DataSource pero en este caso te exige que
la fuente de datos implemente de IList, lo que deja afuera
a Dictionary :(



Ya, aqui lo comodo, creo yo, que seria poder usar el dictionary para
buscar la pareja key-value. De todos modos se me ocurre, para no tener
que duplicar valores, generar un IList de objetos KeyValuePair, añadir
este IList como DataSource al combobox, como dices tu, y asignar el
DisplayMember del ComboBox a "Key", para que este sea el que se
muestre.

Cuando se produzca el evento en el que se desee obtener el value, se
hace un casting a KeyValuePair del SelectedItem y de ahi se saca el
value.

Con esto ultimo solo se definiria una vez la coleccion, seria
"almacenada" (o mas bien asignada) por completo al combobox y se
podria obtener el value con un sencillo casting.

Lo que no tengo claro es si funcionaria la parte del DisplayMember,
pero no veo pq no.

Un saludo.
Respuesta Responder a este mensaje
#10 Hernan
16/04/2007 - 15:48 | Informe spam
> Está bien, pero el problema es que duplicas la colección
> de elementos. Es el inconveniente de usar .Items.

En eso tienes toda la razon. Aunque solo se duplicaria el key de cada
objeto añadido al dictionary. Por eso tambien defino primero el
idictionary y a partir de el el combobox, para no tener que añadir por
duplicado el key a ambos, asegurando que tienen los mismos.

> Podrías usar .DataSource pero en este caso te exige que
> la fuente de datos implemente de IList, lo que deja afuera
> a Dictionary :(

Ya, aqui lo comodo, creo yo, que seria poder usar el dictionary para
buscar la pareja key-value. De todos modos se me ocurre, para no tener
que duplicar valores, generar un IList de objetos KeyValuePair, añadir
este IList como DataSource al combobox, como dices tu, y asignar el
DisplayMember del ComboBox a "Key", para que este sea el que se
muestre.



Creo que usando una KeyedCollection se resuelven todos los problemas.
La KeyedCollection solo tiene que sobreescribir el método
GetKeyForItem()
devolviendo la propiedad sobre la que queremos indizar, en el
DisplayMember
del control especificar el nombre de esa propiedad, asignar la
KeyedCollection
al DataSource y listo.

-H.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida