views:

1748

answers:

1

The whole purpose of the ASP.NET FormView control is to display a single record at a time. So how do I bind it to a single record? It complains that

Data source is an invalid type. It must be either an IListSource, IEnumerable, or IDataSource.

I can wrap my object in a list if that's the only solution. In this application, the FormView is inside a user control and I'm retrieving the object in a public method, i.e. I'm not using a data source control. I'm not doing any 2-way data binding here either, I'm only using the FormView in this case to maintain a consistent look.

If I went by the book and bound a FormView to a data source that returned a list of records, would it actually retrieve all the records and just display only the selected record?

Here's what I ended up implementing in a utility class:

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

As the error message says, the DataSource object must implement IListSource, IEnumerable or IDataSource to work.

If you have an object av type A which do not implement one of the mentioned interfaces then you could as you say wrap your object in a list:

C#

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

VB.NET

Dim myDataSource As List(Of A)(myObject)
Sani Huttunen
Thanks for confirming. It was a bit of a rant disguised as a question. Not that it makes a big difference with one item, but wrapping it in an array is probably more efficient.
Jamie Ide
Agree with the rant. This is stoopid. The control is designed to show a single item, you should be able to bind the object directly.
Michael Dausmann