2010-11-16 15 views
5

tengo las siguientes clases (pseudocódigo):¿Se puede vincular una vista grid de asp.net con un campo en una clase base?

  • Artículo (int Campo1)
  • ItemDetail: Artículo (int Campo2, field3 cadena)

Si fijo ItemDetail como el origen de datos para una asp.net gridview:

grid.DataSource = new List<ItemDetail>(); 
grid.DataBind(); 

¿Puedo utilizar Field1 en GridView? Si es así, ¿cuál es la sintaxis correcta de DataBinder? El siguiente código explota al tratar de enviar a un artículo:

<%# DataBinder.Eval(Container.DataItem, "Field1") %> 

Gracias de antemano por cualquier ayuda.

EDIT: Y soy un idiota. Copié la vista de cuadrícula y llamé a un manejador de eventos RowDataBound para una cuadrícula diferente ... Perdón por haber desperdiciado el tiempo de todos, pero hay algo de información aquí independientemente de si alguien tiene la misma pregunta. Al final, las propiedades públicas de la clase base son vinculantes correctamente. ¡Gracias!

+0

Como solución, agregué getters a la clase secundaria que devuelve el campo base ... que no puede ser la solución ... – IronicMuffin

+0

IronicMuffin, edité tu pregunta usando un bloque de código en lugar del 'pre' Etiqueta HTML (solo tiene que aplicar sangría a 4 espacios o usar el botón de código). ¡Espero que tenga su marca correcta! –

+0

Cuando explota, ¿qué excepción obtienes? –

Respuesta

1

Si su propiedad de clase base es pública, no debería tener un problema siempre y cuando también la esté inicializando en sus constructores hijos.

Además, no estoy seguro de si su enlace de ejemplo es pseudocódigo o no, pero debe vincular una cuadrícula a un IListSource, IEnumerable o IDataSource, por lo que necesita una Colección, Lista, IQueryable, etc. de ItemDetails .

+0

Buen punto, editado. – IronicMuffin

+0

Y eso es lo que pensé. Puede haber algo más pasando aquí ... – IronicMuffin

+0

¿Puedes publicar información sobre las clases? Acabo de probar esto yo mismo para estar doblemente seguro y no tuve problemas para hacer referencia a una propiedad de clase base de una clase infantil. – jwiscarson

-1

Eso requeriría que su clase ItemDetail tenga una propiedad llamada Field1. El resto de la sintaxis es buena sin embargo.

<%# DataBinder.Eval(Container.DataItem, "Field1") %>

ItemDetal itemDetail = new ItemDetail(); 
itemDetail.Field1 = 100; 
  • donde Campo1 es una propiedad accesible, y no sólo un campo privado en su clase. Esto debería escribir 100 en su grilla.
+0

Bueno, sí, pero el punto es que quiero usar Field1 de la clase base y no duplicarlo en la clase secundaria. ¿Hay una sintaxis especial de DataBinder para llegar a la clase base? No veo demasiada documentación sobre esta situación particular. – IronicMuffin

+0

Si todo sale mal con el marcado, siempre puede usar el evento OnItemDataBound para obtener los valores correctos. Pero como dijo jwiscarson, debe ser accesible y recuerde enlazar una lista de elementos/detalles del artículo. – Heki

Cuestiones relacionadas