...
private string _CodigoIne;
private string _Localidad;
...
e intentando a través de otra clase que me devolviera una lista de poblaciones leyéndola de la base de datos a través del método:
public List
no había forma de que me presentara los nombres de las poblaciones en el combobox aunque se lo marcara en la propiedad DisplayMember del combobox susodicho:
cbLocalidad.DataSource = bsLocalidad;
cbLocalidad.DisplayMember = "Localidad";
cbLocalidad.ValueMember = "CodigoINE";
pero como dirían los gallegos, depende, a veces sí a veces no aparecía el nombre y otras el nombre de la clase:
Entidades.MaestroLocalidad
Entidades.MaestroLocalidad
Entidades.MaestroLocalidad
en vez de por ejemplo:
Alicante
Elche
Santa Pola
así que decidí esta mañana sobreescribir el método ToString() de la clase mencionada en primer lugar:
public override string ToString()
{
return _Localidad;
}
y solucionado el problema.
Un saludo
Oscar Montesinos
9 comentarios:
Hola tengo un problema, a ver si me ayudas por favor... tengo el combobox y lo lleno apartir de una consulta de LINQ le asigno el DataSource, ValueMember y DisplayMember ... pero ahora quiero recuperar el valor del item seleccionado, no el text sino el value (lo que hay en el ValueMember) .. cuando utilizo el SelectedValue me trae una cadena {Id=1, Tipo="XX"} .. no se como extraer unicamente el 1 .. el value.
En SelectedValue tienes el objeto completo. Para poder acceder a sus propiedades tan sólo debes poner antes el tipo entre paréntesis si estás en C#, por ejemplo.
(MiTipo) Combobox1.SelectedValue
Hola Oscar, muchas gracias por contestar... pero estoy haciendo algo así int opcion; string opcion1;
opcion1 = (string)radTextBoxNombreHoja.Text .. me trae toda la cadena "{Id=1, Tipo= XX }"
opcion = (int)radTextBoxNombreHoja.Text.ToString();
no me funciona, me sale una excepcion. .. Por otro lado probé pasando el SelectedValue a un Text y ahi me muestra el 1 .. pero de igual manera si cojo el valor desde el text y lo asigno a un variable int ... me sale la misma excepcion, pues el Text tiene la misma cadena "{...}"
Sí, en la consulta de LINQ te devolverá una lista de algún tipo, ese Tipo es lo que devuelve SelectedValue.
class unaClase
{
public int id;
public string Descripcion;
}
SelectedValue de devolverá un objeto de tipo "unaClase" y podrás acceder a sus miembros con:
int opcion1=((unaClase)SelectedValue).id;
No sé si lo entiendes, si no pega el código o me lo mandas por mail a oscarmontesinosmarin@gmail.com y te digo como hacerlo.
Mira... aca cargo el combo
private void CargaOpcionesLiquidacion()
{
ELA_DBEntities ElaEntities = new ELA_DBEntities();
var opcionesLiq = from o in ElaEntities.TipoCosteos
select new { o.IdTipoCosteo, o.TipoCosteo };
this.radComboBoxOpcLiquidacion.DataSource = opcionesLiq;
this.radComboBoxOpcLiquidacion.ValueMember = "IdTipoCosteo";
this.radComboBoxOpcLiquidacion.DisplayMember = "TipoCosteo";
this.radComboBoxOpcLiquidacion.DropDownStyle = RadDropDownStyle.DropDownList;
}
y donde quiero urilizar el value es aca
private void calcularCostos()
{
if (radComboBoxOpcLiquidacion.Text != "")
{
int opcion;
string opcion1;
opcion1 = radComboBoxOpcLiquidacion.Items[radComboBoxOpcLiquidacion.SelectedIndex].Text;
opcion1 = radComboBoxOpcLiquidacion.SelectedValue.ToString();
opcion = (int)radComboBoxOpcLiquidacion.SelectedValue;
.
.
.
}
Un ejemplo:
List#MiClase# lista = new List#MiClase# {new MiClase(1,"Uno"), new MiClase(2,"Dos") };
var opcionesLiq = from o in lista
select new { o.id, o.descripcion };
comboBox1.DataSource = opcionesLiq;
comboBox1.ValueMember = "id";
comboBox1.DisplayMember = "descripcion";
int opcion1 = ((MiClase)comboBox1.SelectedValue).id;
string opcion2 = ((MiClase)comboBox1.SelectedValue).descripcion;
sustituir # por < y >.
Ya encontré el error... o bueno la causa... es que estaba haciendo la asignación en el evento SelectedIndexChanged ... pero si lo utilizo despues, si puedo ulizar sin problema SelectedValue y me trae los datos del ValueMember. De todas formas muchas gracias Oscar
Hola... Tengo un problema con el combobox. Estoy trabajando con el Visual Studio 2010 C# y una BD Oracle 11g. El llenado del combobox es similar a:
cbLocalidad.DataSource = bsLocalidad;
cbLocalidad.DisplayMember = "Localidad";
cbLocalidad.ValueMember = "CodigoINE";
El problema es cuando empiezo a trabajar con el evento: SelectedIndexChanged(object sender, EventArgs e) realizo cualquier operación, y al ejecutar el programa este me genera un error: "No se puede convertir un objeto DBNull en otros tipos", es como si el programa ejecutara no solo el Load sino tambien el evento.
Espero alguna idea de como pueda solucionar el problema :D
Pues tienes 2 opciones.
1ª preguntar si hay seleccionado algo antes de hacer las operaciones con:
if (cbLocalidad.SelectedItem!=null)
{
//el código dentro del SelectedIndexChanged
}
2ª enganchar el evento después de la carga del combo con:
cbLocalidad.SelectedIndexChanged += new EventHandler(cbLocalidad_SelectedIndexChanged);
Publicar un comentario