Apariencia de lista

09/08/2004 - 20:20 por Emiliano | Informe spam
Hola a todos!
Según sé la nueva forma en .NET de darle apariencia a la
lista es manejando el evento OnDrawItem (tengo algunos
ejemplo de eso). Bueno, yo quiero justamente recuperar los
objetos que introduje en la lista y mostrar el miembro del
objeto segun lo que ponga en el DisplayMember... Lo que me
falta saber es como acceder a este miembro si de antemano
no lo conozco...
Gracias

Preguntas similare

Leer las respuestas

#1 Tristan
09/08/2004 - 22:28 | Informe spam
Bueno, en realidad no es del todo la forma nueva. En vb, se hacía así
también. La diferencia es que en vb, era necesario utilizar un buen número
de apis del api win32 para lograr lo mismo.

Pero para responder a tu pregunta, necesito saber de que forma quieres
mostrar el objeto del DisplayMember. ¿Lo necesitas para mostrarlo cuando se
seleccione una fila?. ¿Para cargar el ListBox?.

Los objetos de la lista están en el objeto DataSource:

dim tabla as DataTable = DirectCast(tuListBox.DataSource, DataTable)
dim fila as DataRow
for each fila in tabla.Rows
msgbox(fila(tuListBox.DisplayMember))
next

Solo funcionará si el objeto datasource es un datatable. Para hacerlo
realmente bien, para que funcione en todos los casos, hay que utilizar
reflection.


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#2 Emiliano
09/08/2004 - 23:12 | Informe spam
Gracias por tu respuesta Tristan. Bueno, te cuento, lo
necesitaria tanto para cargar la lista como para modificar
la apariencia del item seleccionado. Justamente el
problema es que no utilizo para cargarla un datatable sino
otro tipo de objeto propio (en realidad tengo un objeto
base del cual se heredan muchos objetos)... Pienso que
realmente debo necesitar eso de reflection... algun link o
idea como para que ver de que se trata el tema?

Bueno, en realidad no es del todo la forma nueva. En vb,


se hacía así
también. La diferencia es que en vb, era necesario


utilizar un buen número
de apis del api win32 para lograr lo mismo.

Pero para responder a tu pregunta, necesito saber de que


forma quieres
mostrar el objeto del DisplayMember. ¿Lo necesitas para


mostrarlo cuando se
seleccione una fila?. ¿Para cargar el ListBox?.

Los objetos de la lista están en el objeto DataSource:

dim tabla as DataTable = DirectCast(tuListBox.DataSource,


DataTable)
dim fila as DataRow
for each fila in tabla.Rows
msgbox(fila(tuListBox.DisplayMember))
next

Solo funcionará si el objeto datasource es un datatable.


Para hacerlo
realmente bien, para que funcione en todos los casos, hay


que utilizar
reflection.


Juan Carlos Badiola
MVP - C#


.

Respuesta Responder a este mensaje
#3 Tristan
10/08/2004 - 19:12 | Informe spam
Pero si conoces la clase, ¿por qué no utilizas sus miembros para acceder al
DisplayMember?. ¿O necesitas que sea algo genérico, válido para cualquier
objeto enlazado?

Usar reflection debería ser siempre la última opción, pero si lo necesitas
te puedo dar un ejemplo.


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#4 Emiliano
10/08/2004 - 20:47 | Informe spam
Yo cree un objeto listbox que hereda del listbox y este
nuevo control recibe como parametro un objeto con el que
se carga la coleccion de items. El tipo del parametro que
recibe es "Bases" (pero instanciado en una de sus clases
derivadas), entonces este objeto carga con objetos del
tipo "Base" todos los items... es por eso que no conozco
de antemano el metodo que quiero usar para mostrar el dato
en pantalla..
Espero no confundirte con la explicación (quisa no me
explico muy bien) pero si tenes algún ejemplo de como
resolver esto seria genial..

Pero si conoces la clase, ¿por qué no utilizas sus


miembros para acceder al
DisplayMember?. ¿O necesitas que sea algo genérico,


válido para cualquier
objeto enlazado?

Usar reflection debería ser siempre la última opción,


pero si lo necesitas
te puedo dar un ejemplo.


Juan Carlos Badiola
MVP - C#


.

Respuesta Responder a este mensaje
#5 Tristan
11/08/2004 - 10:14 | Informe spam
Bueno, ahora si creo comprenderlo. Lo que no se es si
sabré explicarlo. :-)

Bases deberás implementar alguna interface para recorrer
los elementos Base, lo ideal es que soporte IList o
IListSource, por seguir la norma del framework sobre
enlace a datos. Al menos, procura que soporte
IEnumerable.

Cualquiera de estas interfaces, deberá permitir obtener
los elementos de tipo Base, simplemente reocrriendolo con
For Each. A su vez Base deberá tener un miembro para
acceder a sus campos. En este caso, doy por hecho que
este miembro es una propiedad predeterminada:

O sea:

dim fila as Base
for each fila in Me.mBases
msgbox(fila(Me.DisplayMember))
next

¿Se comprende lo que quiero decir?
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida