2011-11-14 3 views
0

Я хотел создать разбивку на страницы для моего reapeater. В базе данных у меня есть сообщения. Я хочу отображать сначала зарегистрированные сообщения пользователей, а затем остальные (например, 40 на сайт).asp.net using pagination with repeater

Интересно, есть ли способ извлечь из строк базы данных образует 40 до 80 или от 80 до 120.

Спасибо за любые подсказки.

+1

проверить это для подкачки с помощью SQL зр: http://geekswithblogs.net/ranganh/archive /2005/04/25/37629.aspx – Waqas

+0

да, но как заставить sql установить первые строки с userId = LoggedInUserId? – gruber

+1

hmm вы могли бы использовать заказ по «зарегистрированному идентификатору пользователя» ASC – Waqas

ответ

0

Давайте предположим, что ваша таблица имеет следующие столбцы: ID, UserID, PostedDate, Subject Затем запрос может выглядеть как показано ниже:

DECLARE @LoggedInUserID int, 
     @RowsPerPage int, 
     @PageNum int; 

SELECT @LoggedInUserID = 1, 
     @RowsPerPage = 10, 
     @PageNum = 1; 

with BlogPostCTE 
AS 
(
    select 
    bp.ID, 
    bp.UserID, 
    bp.PostedDate, 
    CASE WHEN bp.UserID = @LoggedInUserID THEN 1 ELSE 0 END as IsLoggedInUser, 
    bp.[Subject] 
    from BlogPost as bp 
), BlogPostWithPagingCTE 
AS 
(
    Select Top(@RowsPerPage * @PageNum) 
    ResultNum = ROW_NUMBER() OVER (ORDER BY IsLoggedInUser desc, UserID, PostedDate asc), 
    ID, 
    UserID, 
    PostedDate, 
    IsLoggedInUser, 
    [Subject] 
    FROM BlogPostCTE 
) 

select 
    ID, 
    UserID, 
    PostedDate, 
    [Subject] 
FROM BlogPostWithPagingCTE 
where ResultNum > ((@PageNum - 1) * @RowsPerPage)