使用匿名类型填充DetailsView.DataSource

时间:2010-01-23 16:13:43

标签: c# asp.net anonymous-types

我的asp:DetailsView有几列,例如Foo,Bar。

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

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

但是得到下一个错误:

  

数据源是无效类型。它   必须是IListSource,   IEnumerable,或IDataSource。

我怎样才能做我想做的事?

3 个答案:

答案 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>

的myList

答案 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;
}