< назад

DATA BASE PAGING

Data base paging - функционал, которые позволяет реализовать переключение страниц ("paging") не на стороне клиента, а на стороне сервера. Благодаря этому, можно существенно снизить нагрузку на клиентский компьютер.

На скриншоте ниже рассматривается Style Folder. Всего в наличии имеется 148 стилей. Для того, чтобы не выводить все записи на одну страницу, справа устанавливается количество записей (стилей), которое нужно показать.



Data base paging реализует функция Yunique.Core.Data.SqlHelper.AddSQL2008PagingToSQL, в которую передается: строка запроса, параметры сортировки (если нужно), индекс текущей страницы и размер страницы. На основе этих данных, на страницу выводятся только нужные записи.
Также , для того, чтобы работал data base paging, нужно отключить стандартный paging на странице (allow custom paging).

 m_RadGridMaterials.PageSize = If(Request.Form(Me.UniqueID & "$" & "ps") IsNot Nothing, Request.Form(Me.UniqueID & "$" & "ps").ToString, ps.SelectedItem.Value) "размер страницы(кол-во записей, сколько нужно вывести на странице)
ResultCount = Yunique.Core.Data.SqlHelper.GetRecordCount(connection, strSqlSearch) "функция получения общего числа записей для всех страниц
PageCount = System.Math.Ceiling(ResultCount / Convert.ToInt32(Me.ps.SelectedValue)) "количество страниц
hdnRecordCount.Value = ResultCount
If Request.Form("ctrGrid$Button1") <> Nothing Or Request.Form("imgBtnSearch.y") <> Nothing Then "сброс на первую страницу при нажатии на кнопку Search
m_RadGridMaterials.CurrentPageIndex = 0
End If
Dim gridSort As String = String.Join(
", ",
m_RadGridMaterials.MasterTableView.SortExpressions.OfType(Of GridSortExpression).
Select(Function(se) String.Format("{0} {1}", se.FieldName, GetSortOrderDirectionText(se.SortOrder)))) "получение элементов сортировки,для добавления в запрос
If (ResultCount = 0 Or PageCount <= 1) Or (m_RadGridMaterials.CurrentPageIndex + 1 > PageCount) Then m_RadGridMaterials.CurrentPageIndex = 0
oDt = Yunique.Core.Data.SqlHelper.ExecuteDataset(
connection, CommandType.Text,
Yunique.Core.Data.SqlHelper.AddSQL2008PagingToSQL(
strSqlSearch & If(String.IsNullOrEmpty(gridSort), " ", "ORDER BY " & gridSort),
m_RadGridMaterials.CurrentPageIndex + 1, m_RadGridMaterials.PageSize) "функция получения элементов для страницы
).Tables(0)



 "функция получения порядка сортировки

Function GetSortOrderDirectionText(sortOrder As GridSortOrder)
Select Case sortOrder
Case GridSortOrder.Ascending : Return "ASC"
Case GridSortOrder.Descending : Return "DESC"
Case Else : Return ""
End Select
End Function




Есть страницы, где используются не обычные SQL запросы, а процедуры.


 "SPX-пейджинг

Dim params() As SqlParameter = { _
New SqlParameter("@MaterialID", Me.strMaterialId), _
New SqlParameter("@SqlFilter", IIf(String.IsNullOrEmpty(strSearchWhereClause.TrimEnd()), DBNull.Value, strSearchWhereClause)), _
New SqlParameter("@PageNo", CInt(lblCurrentIndex.Text) + 1), _
New SqlParameter("@PageSize", ps.SelectedValue), _
New SqlParameter("@SortOrder", "Sort, ColorCode")} 'New SqlParameter("@SortOrder", DBNull.Value)}

oDs = SqlHelper.ExecuteDataset(oCnn, CommandType.StoredProcedure, GetSPX("spx_Material_Color_SELECT"), params)

Dim pagecount As Integer = 0
Try
pagecount = CInt(oDs.Tables(0).Rows(0).Item("YSTotalRowCount")) "берём общее кол-во записей из результата выполнения процедуры
Catch ex As Exception



 "изменения в процедуре

BEGIN
SELECT
a.MaterialColorID, a.MaterialColorImageID, a.MaterialColorImageVersion,
a.MaterialColorNote,
a.ColorCode, a.Sort, a.ColorName, b.ColorPaletteCustom4 , b.ColorSource,
b.ColorPaletteID, b.ColorFolderID, b.Hex, b.R, b.G, b.B, b.LAB_A, b.LAB_B, b.LAB_L

       INTO #tmp0 - выбираем все записи во временную таблицу

       FROM dbo.pMaterialColor a WITH(NOLOCK)
INNER JOIN dbo.pColorPalette b WITH(NOLOCK) ON a.ColorPaletteID = b.ColorPaletteID WHERE a.MaterialID = @MaterialID

       DECLARE @sqlString NVARCHAR(MAX) = dbo.fnx_CreatePagingString('#tmp0',@PageNo,@PageSize,@SortOrder, @SqlFilter) "функция формирует запрос для выдачи требуемых записей

       EXEC sp_executesql @sqlString
END