Это моя реализация, вроде той же идеи, что и patmortech, но я также обнаружил, что метод ValidateDataSource в BaseDataBoundControl создает исключение во время выполнения, если ваш источник данных не перечисляем.
public class CustomFormView : System.Web.UI.WebControls.FormView
{
public override object DataSource
{
get
{
if (!(base.DataSource is IEnumerable))
return new[] {base.DataSource};
return base.DataSource;
}
set
{
base.DataSource = value;
}
}
// This method complains at run time, if the datasource is not
// IListSource, IDataSource or IEnumerbale
protected override void ValidateDataSource(object dataSource)
{
//base.ValidateDataSource(dataSource);
}
}
РЕДАКТИРОВАТЬ:
Учитывая это предложение, я внес некоторые изменения в способ проверки того, является ли назначенный источник данных перечислимым или нет.Мне также удалось создать пример приложения (VS 2010 Solution) для демонстрации изменений.Приложение можно загрузить с http://raghurana.com/blog/wp-content/attachments/FormViewDataProblem.zip
Короче говоря, это то, что я проверяю, чтобы убедиться, что существующий источник данных уже может быть перечислен:
public static bool CanEnumerate( this object obj )
{
if (obj == null) return false;
Type t = obj.GetType();
return t.IsArray ||
t.Implements(typeof (IEnumerable).FullName) ||
t.Implements(typeof (IListSource).FullName) ||
t.Implements(typeof (IDataSource).FullName);
}
Пожалуйста, не стесняйтесьбольше изменений, если это не совсем желаемый функционал.Приветствия.