Witam,

Miałem problem z paginacją GridView kiedy używam Linq – znalazłem rozwiązanie wykorzystując ObjectDataSource.
…Może najpierw pokaże kod i dopiero napisze z czym mam problem.

W Page_Load mam:


            ObjectDataSource gridview_dane = new ObjectDataSource();
            gridview_dane.ID = "ObjectDataSource_GridView";
            gridview_dane.TypeName = "Magazyn.Class.Linq_Zapytanie";
            gridview_dane.SelectMethod = "Query_All";
            gridview_dane.SelectCountMethod = "Get_Magazyn_Count";
            gridview_dane.EnablePaging = true;
            Page.Controls.Add(gridview_dane);

            GridView_Magazyn.DataSourceID = "ObjectDataSource_GridView";

Dalej w pliku Linq_Zapytanie.cs kod wygląda tak:

        static public System.Linq.IQueryable<Narzedzia> Query_All(int startRowIndex, int maximumRows)
        {
            var Magazyn = new Magazyn_TestContainer();            
            var query = from p in Magazyn.Moj_Magazyn
                         select
                             new Narzedzia
                             {
                                 Id = p.Id,
                                 Nazwa = p.Nazwa,
                                 Typ = p.Typ    
                             };

                return query.OrderBy(p => p.Id).Skip(startRowIndex).Take(maximumRows);
        }

Paginacja działa prawidłowo, jednak potrzebuje do Query_All dodać jeszcze jednen parametr, czyli:

static public System.Linq.IQueryable<Narzedzia> Query_All(int startRowIndex, int maximumRows, string dane)

Rozumiem, że gridview_dane.SelectMethod = "Query_All"; powoduje automatyczne podanie wartości dla startRowIndex i maximumRows …ale jak w Page_Load mam przesłać wartość dla dodatkowego parametru „dane”.

Pozdrawiam
Andrzej