Запрос Linq с использованием DataTable с разбиением на страницы

У меня есть запрос Linq, который я копирую в DataTable, который затем используется для заполнения представления сетки. Я использую группу по «ключу» и «счетчику», которую я оцениваю на странице aspx для основного / подробного представления сетки с повторителем.

Проблема, с которой я сталкиваюсь, заключается в том, что источник данных gridview и привязка к datatable не предоставляют мне никаких дополнительных страниц, которые являются частью данных. Мой запрос:

// Using Linq generate the query command from the DataTable
var query = from c in dtDataTable_GridView.AsEnumerable()
group c by c.Field<string>("CLIN") into g
select new
{
    Key = g.Key,
    Count = g.Count(),
    Items = from i in g                                      
        select new
        {
            CLIN = i.Field<string>("CLIN"),
            SLIN = i.Field<string>("SLIN"),
            ACRN = i.Field<string>("ACRN"),
            CLINType = i.Field<string>("CLINType"),
            Option = i.Field<string>("Option"),
            Unit = i.Field<string>("Unit")
        }
};

// Use extension methods to create new DataTable from query
dtTaskOrderTable = query.CopyToDataTable();

// Set the datasource
gridview1.DataSource = dtTaskOrderTable;

// Bind to the GridView
gridview1.DataBind();  

Если я использую исходную таблицу данных (dtDataTable_GridView) напрямую, у меня есть разбиение на страницы, но как только я выполняю запрос Linq и копирую его обратно в новую таблицу данных (dtTaskOrderTable), я теряю функцию разбиения на страницы.

Также как мне получить значение из имени столбца (например, «Option»), если оно является частью «Items»?

Любая помощь будет оценена. Спасибо, ChrisB


person Community    schedule 27.07.2009    source источник


Ответы (1)


Не обращайте внимания на предыдущий ответ, я удалю его

Для разбиения по страницам требуется интерфейс ICollection. Ни IEnumerable, ни IQuerable работать не будут

Список ‹(Of‹ (T>)>) будет работать, поскольку списки реализуют интерфейс Icollection.

Значит тебе нужно

gridview1.DataSource = dtTaskOrderTable.ToList();
person Bogdan_Ch    schedule 27.07.2009