views:

674

answers:

1

I have a Linq query that I copy to a DataTable which is then used to populate a gridview. I am using a group by "key" and "count" which I evaluate in the aspx page for a master/detail gridview with a repeater.

The problem that I am encountering is that the gridview datasource and bind to the datatable is not presenting me with any additional pages that are part of the data. My query is:

// 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();

If I use the original datatable (dtDataTable_GridView) directly I have paging but once I do the Linq Query and copy it back to a new datatable (dtTaskOrderTable) I lose the paging feature.

Also how do I get a value from a column name ("Option" for instance) if it is part of "Items"?

Any help would be appreciated. Thanks, ChrisB

A: 

Please disregard the previous answer I will delete it

It requires ICollection interface for paging. Neither IEnumerable nore IQuerable will not work

List<(Of <(T>)>) will work as Lists implement Icollection interface

So you need

gridview1.DataSource = dtTaskOrderTable.ToList();
Bogdan_Ch