Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Постраничный вывод информации в GridView с использованием LinqDataSource

38K
10 июня 2013 года
Telsystems
20 / / 13.11.2012
Доброго времени суток. Нужно вывести по 5 записей на странице с возможностью перехода на другую страницу.

Технология Asp.Net WebForms

Решил использовать для этого GridView а для заполнения данными LinqDataSource.

Создаю сам грид

Код:
<asp:GridView ID="gvEmployees"
   runat="server"
   AllowPaging="True"
   PageSize="5"
   AllowSorting="True"
   DataSourceID="LinqDataSource1"
   EmptyDataText="Элементов нет"
   AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField SortExpression="Title" DataField="EmployeeId" HeaderText="ID" />
        <asp:BoundField SortExpression="Title" DataField="EmployeeName" HeaderText="Name" />
        <asp:BoundField SortExpression="Title" DataField="EmployeeSalary" HeaderText="Salary" />
    </Columns>
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" OnSelecting="LinqDataSource1_Selecting"></asp:LinqDataSource>
Заполняю его так:


Код:
protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
    {
       e.Result = from p in _employees
                       select new
                       {
                           EmployeeId = p.EmployeeId,
                           EmployeeName = p.EmployeeName,
                           EmployeeSalary = p.CalculateMonthlySalary()
                       };

    }
Проблема в том, что при перехоже по страницам идет загрузка данных по новой и добавление этих данных в GridViev.

Если сделать заполнение так:


Код:
<asp:GridView ID="gvEmployees"
       runat="server"
       AllowPaging="True"
       PageSize="<%# PAGE_SIZE %>"
        AllowSorting="True"
        DataSourceID="LinqDataSource1"
        EmptyDataText="Элементов нет"
        AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField SortExpression="Title" DataField="EmployeeId" HeaderText="ID" />
            <asp:BoundField SortExpression="Title" DataField="EmployeeName" HeaderText="Name" />
            <asp:BoundField SortExpression="Title" DataField="EmployeeSalary" HeaderText="Salary" />
        </Columns>
    </asp:GridView>
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" OnSelecting="LinqDataSource1_Selecting"></asp:LinqDataSource>

Код:
protected const int PAGE_SIZE = 5;
protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
        {            
            var query = from p in _employees
                        select new
                        {
                            EmployeeId = p.EmployeeId,
                            EmployeeName = p.EmployeeName,
                            EmployeeSalary = p.CalculateMonthlySalary()
                        };

            e.Arguments.TotalRowCount = query.Count();
            query =  query.Skip(gvEmployees.PageIndex * PAGE_SIZE).Take(PAGE_SIZE);
            e.Result = query;

        }
То выведется 5 записей, но пропадут кнопки навигации.

Как правильно сделать постраничный вывод данных?

Правильна ли такая реализация?

Спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог