我的asp:DetailsView
有几列,例如Foo,Bar。
我想用匿名类型填写它,即:
gridView.DataSource = new { Foo = 1, Bar = "2" };
gridVeew.DataBind();
但是得到下一个错误:
数据源是无效类型。它 必须是IListSource, IEnumerable,或IDataSource。
我怎样才能做我想做的事?
答案 0 :(得分:4)
DataSource属性需要一个集合。您指定的值不是集合。
您必须创建一个集合并将匿名类型的实例放入该集合中。以下应该可能有效(虽然我没有用DataSource测试它):
gridView.DataSource = new[] {new {Foo = 1, Bar = "2"}};
答案 1 :(得分:2)
另一种解决方案:
var list = from item in myList
select new { Foo = item.Foo, Bar = item.Bar.ToString() };
gridView.DataSource = list;
gridView.DataBind();
假设您有IEnumerable<T>
答案 2 :(得分:0)
您应该有一个包含匿名类型的集合 看看我在this blog
中找到的这个例子static void Main(string[] args)
{
var Customer = new { FirstName = "John", LastName = "Doe" };
var customerList = MakeList(Customer);
customerList.Add(new { FirstName = "Bill", LastName = "Smith" });
//then you can bind this collection
gridView.DataSource = customerList;
gridVeew.DataBind();
}
public static List<T> MakeList<T>(T itemOftype)
{
List<T> newList = new List<T>();
return newList;
}