Member 14071109 Ответов: 2

Мне нужно сделать разбивку на страницы


Я пытался, но мне нужно просмотреть его в gridview со 100 записями и следующими 100 записями, как это любезно помогите мне

Что я уже пробовал:

Мой код ниже показывает
Declare @start int,@limit int = 100, @mod int, @pagecount int,@pagesub int

    set @start =(select count(sno) from tbl_Purchase_Stock )
	
	set @endproductcount=@start
	
    set @mod = @start % @limit

    if(@mod = 0)
    Begin
        set @pagesub = @start/@limit
        set @pagecount = @pagesub
    end
    else
    Begin
        set @pagesub = @start/@limit
        set @pagecount = @pagesub+1
    end

	select * from (SELECT DISTINCT P.sno AS sno,ROW_NUMBER() Over (ORDER BY P.sno asc) as rownum,P.code AS code, P.name AS name, P.descrip AS descrip, P.color AS color, P.size AS size, P.type AS type, P.qty AS qty, P.unitrt AS unitrt, (P.qty*P.unitrt) AS totalur, P.wholert AS wholert,P.qty*P.wholert AS Totalwholert,P.name+' -'+P.code AS C_name,L.Low_stock_Shop1  AS LOW FROM tbl_Purchase_Stock AS P,tbl_Low_stk_Entry_details AS L WHERE P.code=L.code 
)as tbl where rownum between @endproductcount-(@limit-1) AND @endproductcount

2 Ответов

Рейтинг:
2

RickZeeland

Вас также может заинтересовать виртуальный режим, см.: c# - реализация виртуального режима для datagridview, который является databound - переполнение стека[^]

Вот еще один подход с UserControl: DataGridView С Подкачкой (UserControl)[^]
Примечание: для больших баз данных предпочтительным способом является метод хранимых процедур.


Рейтинг:
1

Santosh kumar Pithani

DECLARE @PageIndex int=1; --firstPage
DECLARE @PageSize int=100; --100 records/page
DECLARE @cnt int;
--Create Declarative table(if huge records #temp is best) same as selected columns
DECLARE @Temp
   TABLE(sno int,RowNumber int,wholert int,Totalwholert float,C_name Varchar(50),LOW float);
--INSERT all records into @Temp
INSERT INTO @Temp 
SELECT DISTINCT P.sno AS sno
          ,ROW_NUMBER() Over (ORDER BY P.sno asc) as RowNumber
          ,P.wholert AS wholert 
          ,P.qty*P.wholert AS Totalwholert
		  ,P.name+' -'+P.code AS C_name
		  ,L.Low_stock_Shop1  AS LOW 
   FROM tbl_Purchase_Stock AS P INNER JOIN tbl_Low_stk_Entry_details AS L 
 ON P.code=L.code 


 select @cnt=COUNT(1) FROM @Temp;

 SELECT * FROM @Temp
    WHERE  
	RowNumber BETWEEN (@PageIndex -1) * @PageSize + 1 AND 
	                 (((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1;

select @cnt AS TotalRecords;


CHill60

Разве использование CTE не было бы более эффективным, чем использование временной таблицы? например

;with cte as
(
	SELECT DISTINCT P.sno AS sno
		,ROW_NUMBER() Over (ORDER BY P.sno asc) as RowNumber
		,P.wholert AS wholert ,P.qty*P.wholert AS Totalwholert
		,P.name+' -'+P.code AS C_name,L.Low_stock_Shop1  AS LOW 
	FROM tbl_Purchase_Stock AS P 
	INNER JOIN tbl_Low_stk_Entry_details AS L ON P.code=L.code 
)
SELECT * FROM cte
WHERE RowNumber BETWEEN (@PageIndex -1) * @PageSize + 1 AND 
	                 (((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1;

Santosh kumar Pithani

У меня есть создать таблицу для отображения общего количества записей, а также количество записей в таблице так
временная таблица используется вместо CTE.Мы знаем, что CTE поддерживает только выполнение одной области действия.

CHill60

Достаточно справедливо - за исключением того, что вы не используете @cnt</pre> for anything and as you have no <code>where пункт, который вы могли бы вычислить @cnt from the original table. There is no need for a temporary table (or table variable)

Santosh kumar Pithani

Я принимаю ваше предложение, но во многих случаях объединения(несколько таблиц) и группировка по командам(сложные запросы), используемые для подкачки и @cnt, являются проблемой производительности по сравнению с временными таблицами.