2010-01-23 71 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>