2010-01-23 40 views
0

我有一个asp:DetailsView与几列,例如, Foo,酒吧。填写DetailsView.DataSource与匿名类型

我想用匿名类型来填补它,即:

gridView.DataSource = new { Foo = 1, Bar = "2" }; 
gridVeew.DataBind(); 

但是,让下一个错误:

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

我该怎么办我想要什么?

回答

4

DataSource属性需要一个集合。您分配的值不是集合。

您将不得不创建一个集合并将该匿名类型实例放入该集合中。下面大概应该工作(虽然我还没有与数据源进行测试吧):

gridView.DataSource = new[] {new {Foo = 1, Bar = "2"}}; 
+0

很奇怪的一个myList中。我自己尝试过,但得到了同样的错误。之后决定在这里寻求帮助。所以我不得不重建项目或类似的东西..谢谢! – abatishchev 2010-01-23 16:46:24

+1

是的,当这种事发生时很烦人!无论如何,很高兴能得到协助:) – 2010-01-23 22:07:42

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; 
}  
+1

通用方法技巧很好。但在这种情况下,由于DataSource不需要强类型集合,因此不必要。 – 2010-01-23 22:09:34

+1

正确的彼得。你的答案非常简单而巧妙 – Matias 2010-01-24 04:55:15

2

找到另一种解决方案:

var list = from item in myList 
     select new { Foo = item.Foo, Bar = item.Bar.ToString() }; 
gridView.DataSource = list; 
gridView.DataBind(); 

它假定你有IEnumerable<T>