Crear objeto que llene datagrid

10/12/2008 - 23:31 por José Luis | Informe spam
Hola a todos.

Quisiera saber cómo hacer que un datagrid pueda obtener información
sobre las propiedades de un objeto. No estoy hablando de objetos definidos
estáticamente, sino objetos como puede ser un DataRow, que tiene un nº de
campos indefinido.

¿Qué interfaz o qué interfaces tiene que implementar mi clase para poder
facilitar información al datagrid (o a otros objetos de datos) sobre su
contenido?


Gracias!

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
11/12/2008 - 08:01 | Informe spam
"José Luis" wrote in message
news:
Quisiera saber cómo hacer que un datagrid pueda obtener información
sobre las propiedades de un objeto. No estoy hablando de objetos definidos
estáticamente, sino objetos como puede ser un DataRow, que tiene un nº de
campos indefinido.

¿Qué interfaz o qué interfaces tiene que implementar mi clase para
poder facilitar información al datagrid (o a otros objetos de datos) sobre
su contenido?



¿Te refieres a que quieres asignar un objeto de tu clase a la propiedad
DataSource del DataGrid, y que el DataGrid automáticamente muestre registros
con datos obtenidos de tu objeto?

En ese caso, lo que necesitas es que tu clase imlemente uno de estos dos
interfaces: IList o IListSource. El más sencillo es IListSource, que sirve
sólo para leer datos. Si quisieras también modificarlos desde el Grid,
necesitarías el IList, que requiere implementar muchos más métodos.
Respuesta Responder a este mensaje
#2 José Luis
11/12/2008 - 10:07 | Informe spam
Exactamente eso.

Gracias, Alberto.

"Alberto Poblacion"
escribió en el mensaje de noticias:#
"José Luis" wrote in message
news:
Quisiera saber cómo hacer que un datagrid pueda obtener información
sobre las propiedades de un objeto. No estoy hablando de objetos
definidos estáticamente, sino objetos como puede ser un DataRow, que
tiene un nº de campos indefinido.

¿Qué interfaz o qué interfaces tiene que implementar mi clase para
poder facilitar información al datagrid (o a otros objetos de datos)
sobre su contenido?



¿Te refieres a que quieres asignar un objeto de tu clase a la propiedad
DataSource del DataGrid, y que el DataGrid automáticamente muestre
registros con datos obtenidos de tu objeto?

En ese caso, lo que necesitas es que tu clase imlemente uno de estos
dos interfaces: IList o IListSource. El más sencillo es IListSource, que
sirve sólo para leer datos. Si quisieras también modificarlos desde el
Grid, necesitarías el IList, que requiere implementar muchos más métodos.

Respuesta Responder a este mensaje
#3 José Luis
11/12/2008 - 10:21 | Informe spam
Perdona, Alberto. Después de releer tu mensaje, no. No es eso lo que quiero.

Yo ya tengo una lista de objetos BindingList<>. Estos objetos no exponen
todos sus atributos a través de propiedades, por lo que no puedo enlazarlos
directamente a un datagridview. Los atributos del objeto que quiero mostrar
puedo recogerlos directamente en datarows, en archivos xml o en hashtables
que creo a través de lectura de atributos EXIF de ficheros. Ah, incluso
tengo que hacer lo mismo para mostrar información de la codificación ASN.1
de certificados de DNie. Lo que quiero es saber qué tengo que implementar en
los objetos que forman la lista para poder acceder a estos atributos sin que
estén declarados programáticamente en la clase.

Supongo que el mecanismo debe ser similar al que implementa un objeto
DataTable cargado a partir de una consulta dinámica. Cuando estableces el
DataSource del DataGrid, ¿cómo averigua el DataGridView los valores que
tiene que mostrar de cada DataRow del DataTable con el que enlazas?


Gracias :)

"Alberto Poblacion"
escribió en el mensaje de noticias:#
"José Luis" wrote in message
news:
Quisiera saber cómo hacer que un datagrid pueda obtener información
sobre las propiedades de un objeto. No estoy hablando de objetos
definidos estáticamente, sino objetos como puede ser un DataRow, que
tiene un nº de campos indefinido.

¿Qué interfaz o qué interfaces tiene que implementar mi clase para
poder facilitar información al datagrid (o a otros objetos de datos)
sobre su contenido?



¿Te refieres a que quieres asignar un objeto de tu clase a la propiedad
DataSource del DataGrid, y que el DataGrid automáticamente muestre
registros con datos obtenidos de tu objeto?

En ese caso, lo que necesitas es que tu clase imlemente uno de estos
dos interfaces: IList o IListSource. El más sencillo es IListSource, que
sirve sólo para leer datos. Si quisieras también modificarlos desde el
Grid, necesitarías el IList, que requiere implementar muchos más métodos.

Respuesta Responder a este mensaje
#4 Alberto Poblacion
11/12/2008 - 14:17 | Informe spam
"José Luis" wrote in message
news:
Perdona, Alberto. Después de releer tu mensaje, no. No es eso lo que
quiero.

Yo ya tengo una lista de objetos BindingList<>. Estos objetos no
exponen todos sus atributos a través de propiedades, por lo que no puedo
enlazarlos directamente a un datagridview. Los atributos del objeto que
quiero mostrar puedo recogerlos directamente en datarows, en archivos xml
o en hashtables que creo a través de lectura de atributos EXIF de
ficheros. Ah, incluso tengo que hacer lo mismo para mostrar información de
la codificación ASN.1 de certificados de DNie. Lo que quiero es saber qué
tengo que implementar en los objetos que forman la lista para poder
acceder a estos atributos sin que estén declarados programáticamente en la
clase.

Supongo que el mecanismo debe ser similar al que implementa un objeto
DataTable cargado a partir de una consulta dinámica. Cuando estableces el
DataSource del DataGrid, ¿cómo averigua el DataGridView los valores que
tiene que mostrar de cada DataRow del DataTable con el que enlazas?



Ah, entonces la cosa es más problemática. Cuando te dije que el DataSource
del dataGrid aceptaba un IList o un IListSource, en realidad te estaba dando
una versión simplificada. Según la documentación, acepta cualquiera de estos
tipos de dato:

A DataTable
A DataView
A DataSet
A DataViewManager
Any component that implements the IListSource interface
Any component that implements the IList interface

Así pues, reconoce el DataTable de manera especial, y probablemente
interactúa internamente con dicho objeto de manera específica para sacar
todos los datos de las columnas, cosa que no hace a través de los IList, ya
que de estos sólo muestra los valores de las Propiedades públicas.

No he encontrado nada de documentación sobre cuál es esa interacción
específica entre el DataGrid y los distintos proveedores de datos
(DataTable, DataView, DataSet, DataViewManager) para obtener dinámicamente
los datos de las columnas. Puede que tu mejor opción sea construir
dinámicamente en memoria un DataTable con los datos que te interesan, y
pasarle ese DataTable al DataGrid.
Respuesta Responder a este mensaje
#5 Alfredo Novoa
11/12/2008 - 14:36 | Informe spam
Hola José Luis

El Thu, 11 Dec 2008 10:21:08 +0100, José Luis escribió:

Perdona, Alberto. Después de releer tu mensaje, no. No es eso lo que quiero.



Lo que tienes que hacer es implementar IBindingList e ITypedList, y crear
un descendiente de PropertyDescriptor e implementar también
ICustomTypeDescriptor. Y siquieres editar los datos tendrás que implementar
IEditableObject e INotifyPropertyChanged.

Yo ya tengo una lista de objetos BindingList<>. Estos objetos no exponen
todos sus atributos a través de propiedades, por lo que no puedo enlazarlos
directamente a un datagridview.



Pues tienes que exponerlas con lo que te he dicho. Yo lo he hecho hace
bastante tiempo y es un poco lío. Tendría que repasarlo para acordarme de
como se hacía exactamente.


Saludos
Alfredo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida