Заполните DetailsView.DataSource анонимным типом - PullRequest
0 голосов
/ 23 января 2010

У меня есть asp:DetailsView с несколькими столбцами, например Фу, Бар.

Я хочу заполнить его анонимным типом, т. Е .:

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

Но получаю следующую ошибку:

Источник данных недопустимого типа. Это должен быть либо IListSource, IEnumerable или IDataSource.

Как я могу делать то, что хочу?

Ответы [ 3 ]

4 голосов
/ 23 января 2010

Свойство DataSource ожидает коллекцию. Назначаемое вами значение не является коллекцией.

Вам нужно будет создать коллекцию и поместить в нее анонимный типизированный экземпляр. Следующее, вероятно, должно работать (хотя я не проверял это с DataSource):

gridView.DataSource = new[] {new {Foo = 1, Bar = "2"}};
2 голосов
/ 23 января 2010

Другое решение:

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

Что предполагает, что у вас есть myList IEnumerable<T>

0 голосов
/ 23 января 2010

У вас должна быть коллекция, содержащая ваш анонимный тип.
Посмотрите на этот пример, который я нашел в этом блоге

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;
}      
...