2009-07-13 37 views
24

El objetivo del control FormView de ASP.NET es mostrar un solo registro a la vez. Entonces, ¿cómo puedo vincularlo a un solo registro? Se queja de que¿Cómo puedo vincular un FormView ASP.NET a un solo registro?

El origen de datos es un tipo no válido. Debe ser un IListSource, IEnumerable o IDataSource.

Puedo envolver mi objeto en una lista si esa es la única solución. En esta aplicación, FormView está dentro de un control de usuario y estoy recuperando el objeto en un método público, es decir, no estoy usando un control de fuente de datos. No estoy haciendo ningún enlace de datos bidireccional aquí, solo estoy usando FormView en este caso para mantener una apariencia coherente.

Si fui por el libro y atado un FormView a una fuente de datos que devolvió una lista de registros, ¿recuperaría realmente todos los registros y solo mostraría el registro seleccionado?

Esto es lo que terminé en la implementación de una clase de utilidad:

public static IEnumerable<T> WrapInEnumerable<T>(T item) 
{ 
    return new T[] {item}; 
} 
+0

Cuando traté de implementar esto en mi entidad Linq2Sql todavía lanzó el error cuando c astándolo a una matriz. Probé la idea de la Lista de Sani Huttunen y esto funcionó. – rtpHarry

+1

GOTCHA: Si está configurando manualmente la propiedad .DataSource, ¡no olvide el .DataBind() en la siguiente línea! Me dejó rascándome la cabeza durante unos minutos cuando no tuve ningún error, pero no se mostraron datos. Obvio en retrospectiva, pero normalmente uso ObjectDataSource por lo que no fue instintivo para mí – rtpHarry

+1

Acabo de usar esto yo mismo con una pequeña diferencia. Lo convertí en un método de extensión al cambiar 'T item' por' this T item'. Gracias por la gran idea con esto. – Kirk

Respuesta

18

Como dice el mensaje de error, el objeto DataSource debe implementar IListSource, IEnumerable o IDataSource para trabajar.

Si usted tiene un prom objeto de tipo A que no aplicar una de las interfaces mencionadas a continuación, usted podría como usted dice envolver su objeto en una lista:

C#

var myDataSource = new List<A> {myObject}; 

VB .NET

Dim myDataSource As List(Of A)(myObject) 
+2

Gracias por confirmar. Fue una pequeña diatriba disfrazada de pregunta. No es que haga una gran diferencia con un artículo, pero envolverlo en una matriz probablemente sea más eficiente. –

+8

De acuerdo con la queja. Esto es stoopid El control está diseñado para mostrar un solo elemento; debería poder enlazar el objeto directamente. –

Cuestiones relacionadas