Пейджинг с GridView и LINQ to SQL - PullRequest
2 голосов
/ 17 мая 2011

Мой обзор:

<asp:GridView runat="server" ID="MyGridView" AutoGenerateColumns="false" 
    DataKeyNames="ID" 
    OnRowCreated="MyGridView_RowCreated" AllowPaging="true" Width="100%" 
    PageSize="5" onpageindexchanging="MyGridView_PageIndexChanging" >

Мой код на page_load:

MyGridView.DataSource = new Emp.GetData();
MyGridView.DataBind();

Мой код:

using (DataContext db = new DataContext())
{
    var query = //valid query here   

    query = query.Skip(StartRowIndex *5 ).Take(5);

    return query.ToList();
}

если у меня 15 записей в моей БД, при загрузке страницы я вижу ссылки на страницу 1,2 3 с данными для показанной страницы 1 - 5 записей. затем, когда я перехожу на страницу 2 с 5 записями, я вижу ссылки на страницы 1 и 3. когда я перехожу на страницу 3, я вижу только 2 записи вместо 5, и иногда ссылка на пейджинговую страницу также не отображается правильно.

Я хочу отображать 5 записей на страницу и хочу, чтобы GridView определял, сколько страниц отображать.

Я не использую LinqDataSource, просто есть метод, который возвращает список.

Ответы [ 2 ]

4 голосов
/ 17 мая 2011

На самом деле, как правило, проще, если вы используете LinqDataSource.

<asp:LinqDataSource ID="MyDataSource" runat="server"
    OnSelecting="MyDataSource_Selecting">
</asp:LinqDataSource>

А в коде вы можете просто перенаправить LinqDataSource для вызова уровня бизнес-логики,Однако теперь нужно будет оставить объект DataContext открытым, т. Е. Не оборачивать его в блок using, иначе вы получите ошибку (и также не применяете ручную подкачку с помощью Skip(..).Take(..).

protected void MyDataSource_Selecting(object sender,
        LinqDataSourceSelectEventArgs e) {
    e.Result = Emp.GetData();
}

Теперь LinqDataSource должен автоматически управлять всеми страницами для вас.

0 голосов
/ 17 мая 2011

В качестве альтернативы вы можете использовать PagedDataSource класс для достижения этого.

Вот статья , объясняющая, как это работает.

...