Rellenar ComboBox de varias columnas con DataReader

22/07/2006 - 16:53 por Arturo | Informe spam
Hola amigos.

Estoy haciendo una aplicación que lee datos desde una base de datos.
Bien, ejecuto un comando que llama a un procedimiento almacenado y
devuelve un conjunto de resultados de varias columnas, el cual es
asignado a un SqlDataReader. El problema es que a partir de dicho
SqlDataReader (repito, de varias columnas) quiero rellenar un ComboBox,
de manera que quiero ocultar algunas columnas y mostrar otras. No se si
se puede hacer directamente o si previamente debe crearse un arreglo de
varias columnas. En VBA esto era muy sencillo.

SqlConnection cnx=new SqlConnection("mi_cadena_conexion") ;
cnx.Open() ;
SqlCommand cmd=new SqlCommand("sp_mi_procedimiento_almacenado",cnx) ;
SqlDataReader dr=cmd.ExecuteReader() ;
// Hasta aquí llegue
// while (dr.Read())
// {
// Que código puedo poner aca?
// }

Espero que puedan ayudarme. Gracias

Preguntas similare

Leer las respuestas

#1 Vyacheslav Popov
23/07/2006 - 12:11 | Informe spam
Hola Arturo,

Puedes crear una clase que represente tus columnas en el combobox:

public clase ColCombo
{

public ColCombo(string nombre, string apellidos) { ... }
public override string ToString()
{
return String.Format("{0}, {1}", apellidos, nombre);
}
}

y posteriormente crear a partir de dataReader y agregar al ComboBox.

Saludos.

"Arturo" escribió en el mensaje
news:
Hola amigos.

Estoy haciendo una aplicación que lee datos desde una base de datos.
Bien, ejecuto un comando que llama a un procedimiento almacenado y
devuelve un conjunto de resultados de varias columnas, el cual es
asignado a un SqlDataReader. El problema es que a partir de dicho
SqlDataReader (repito, de varias columnas) quiero rellenar un ComboBox,
de manera que quiero ocultar algunas columnas y mostrar otras. No se si
se puede hacer directamente o si previamente debe crearse un arreglo de
varias columnas. En VBA esto era muy sencillo.

SqlConnection cnx=new SqlConnection("mi_cadena_conexion") ;
cnx.Open() ;
SqlCommand cmd=new SqlCommand("sp_mi_procedimiento_almacenado",cnx) ;
SqlDataReader dr=cmd.ExecuteReader() ;
// Hasta aquí llegue
// while (dr.Read())
// {
// Que código puedo poner aca?
// }

Espero que puedan ayudarme. Gracias
Respuesta Responder a este mensaje
#2 Arturo
24/07/2006 - 22:38 | Informe spam
Que tal Vyacheslav,

En cuanto a la solución que planteas, eso implicaría crear una clase
para cada tipo de resultados de consultas SQL, pues no todas estas
tendran las mismas columnas, ni el mismo número de columnas. ¿Cómo
haría para ocultar ciertas columnas, pero aun asi tener acceso al
valor que se almacena en ellas?. Bueno, me pase el fin de semana
revisando la documentacion de VS .NET y llegué a la conclusión de que
puedo resolver el problema parcialmente utilizando objetos DataTable y
DataAdapter y configurando la propiedad DataSource, DisplayMember y
ValueMember, asi:

SqlCommand cmd=new SqlCommand("sp_procedimiento", miConexion);
cmd.CommandType=CommandType.StoredProcedure;
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataTable dt=new DataTable();
// Relleno la tabla
da.Fill(dt);
miCombo.DataSource=dt;
miCombo.DisplayMember=dt.Columns[0].ColumnName; // El valor que se
mostrará
miCombo.ValueMember=dt.Columns[2].ColumnName; // El valor oculto que
proporciona

// el valor a la propiedad

// SelectedValue del ComboBox

Saludos,

Hola Arturo,

Puedes crear una clase que represente tus columnas en el combobox:

public clase ColCombo
{

public ColCombo(string nombre, string apellidos) { ... }
public override string ToString()
{
return String.Format("{0}, {1}", apellidos, nombre);
}
}

y posteriormente crear a partir de dataReader y agregar al ComboBox.

Saludos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida