Ayuda con coleccion en Combobox

19/09/2007 - 13:26 por Gonzalo Rodríguez Carrera | Informe spam
Hola a todos

Les expongo el caso y mientras tanto les recuerdo que llevo 15 dias
con C#, asi que vamos, soy un novatillo...

Tengo un combo box al cual le quiero cargar los datos de una tabla
donde el código es int, pero no autonumerico (es decir hay "agujeros"
y no tiene por que ir ordenado, p.ej.: 1,2,5,18,9, etc...) y luego hay
un campo descripción.

Para preservar la arquitectura de 3 capas, cargo todo en una colección
que después cargo en el combo mostrando sólo la propiedad "Valor" (que
se corresponde con la descripcion)

Hasta ahí todo bien.

El problema es que cuando quiero grabar el registro y necesito acceder
al combo para recuperar el Código correspondiente al texto
seleccionado no lo consigo.
Lo mas que obtengo es el índice que ocupa en la colección o el texto
de la descripción.

¿Alguién me echa un cable?
Gracias por adelantado.

Gonzalo Rodríguez Carrera
Marka Informática
(protégete de los virus: hierve el pc antes de usarlo)

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
19/09/2007 - 13:52 | Informe spam
"Gonzalo Rodríguez Carrera" wrote in message
news:
El problema es que cuando quiero grabar el registro y necesito acceder
al combo para recuperar el Código correspondiente al texto
seleccionado no lo consigo.



Asumo que se trata de una aplicación Windows y no Web por la terminología
empleada ("combo" y no "dropdown"). En ese caso, hay una técnica que se
puede usar, que consiste en que el combo acepta que sus elementos sean no
solo strings, sino cualquier clase de objetos (y lo que presenta en pantalla
es el ToString() de cada objeto). Gracias a esto, se puede crear una clase
que encapsule el código y texto de cada elemento, crear una colección de
elementos de esa clase, y asignar al combo esos elementos. Por ejemplo:

public class ElementoParaElCombo
{
private int codigo;
public int Codigo{ get{return codigo;} set {codigo=value;}}
private string texto;
public string Texto{ get{return texto;} set {texto=value;}}
public ElementoParaElCombo(int codigo, string texto)
{
this.codigo=codigo;
this.texto=texto;
}
public override string ToString()
{
return this.Texto;
}
}

...

//Para cargar la coleccion:
//(Esto es un ejemplo. En realidad traes los datos desde BD)
public List<ElementoParaElCombo> lista = new List<ElementoParaElCombo>();
lista.Add(new ElementoParaElCombo(1, "Uno"));
lista.Add(new ElementoParaElCombo(10, "Dos"));
lista.Add(new ElementoParaElCombo(25, "Tres"));

//Para vincularla al "Combo":
ComboBox1.DataSource = lista;

...

//Para sacar el código del elemento seleccionado:
ElementoParaElCombo seleccionado = (ElementoParaElCombo)
ComboBox1.SelectedItem;
int codigo = seleccionado.Codigo;
Respuesta Responder a este mensaje
#2 Gonzalo Rodríguez Carrera
19/09/2007 - 15:44 | Informe spam
Gracias...
Me faltaba la última parte:

//Para sacar el código del elemento seleccionado:
ElementoParaElCombo seleccionado = (ElementoParaElCombo)
ComboBox1.SelectedItem;
int codigo = seleccionado.Codigo;

No se me había ocurrido (bueno de hecho no sabia que se pudiera) hacer
un cast de esa forma... pero el caso es que funciona genial.
Muchísimas gracias nuevamente.

Gonzalo Rodríguez Carrera
Marka Informática
(protégete de los virus: hierve el pc antes de usarlo)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida