Linq查询使用DataTable进行分页

时间:2009-07-27 16:06:04

标签: linq datatable paging

我有一个Linq查询,我将其复制到DataTable,然后用于填充gridview。我正在使用“key”和“count”组,我在aspx页面中评估了带有转发器的主/详细网格视图。

我遇到的问题是gridview数据源和绑定到数据表没有向我提供作为数据一部分的任何其他页面。 我的疑问是:

// 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),我就失去了分页功能。

如果它是“Items”的一部分,如何从列名中获取值(例如“Option”)?

任何帮助将不胜感激。 谢谢, ChrisB

1 个答案:

答案 0 :(得分:0)

请忽略之前的答案我会将其删除

它需要ICollection接口进行分页。 IEnumerable nore IQuerable都不会起作用

List&lt;(Of&lt;(T&gt;)&gt;)将作为Lists实现Icollection接口

所以你需要

gridview1.DataSource = dtTaskOrderTable.ToList();