Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

PaginationGrid

A unit containt an utility class to manager pagination Grid data.

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

TPagination for Delphi

TPagination é uma classe Delphi simples e reutilizável para controle de paginação de dados em DBGrid, StringGrid ou qualquer listagem visual.

Ela permite definir o número máximo de linhas por página, calcular total de páginas, navegar entre páginas e — opcionalmente — atualizar um painel (TPanel) com o status atual.


✨ Recursos

  • Controle de página atual, total de registros, total de páginas e offset SQL.
  • Dois construtores (Create):
    • Um simples, apenas com o número máximo de linhas.
    • Outro com painel (TPanel) e legenda automática.
  • Métodos para avançar e retroceder páginas.
  • Integração fácil com queries SQL.
  • Pode ser usada com qualquer componente visual.

🧱 Estrutura da Classe

delphi
TPagination = class
private
  procedure SetVisible();
  procedure SetCaption();
public
  MaxRows: Integer;
  TotalRecords: Integer;
  TotalPages: Integer;
  CurrentPage: Integer;
  Offset: Integer;

  PanelCaption: string;
  PanelVisible: Boolean;
  Panel: TPanel;

  function SetPagination(AInitialPage: Integer = 1): Integer;
  function Rewind(): Integer;
  function Skip(): Integer;

  constructor Create(AMaxRows: Integer); overload;
  constructor Create(AMaxRows: Integer; 
    var APanel: TPanel; ACaptionPanel: string = ''); overload;
end;

🚀 Exemplo de Uso Criando e usando a classe

delphi
uses
  UnitPagination, // onde TPagination foi declarada
  Vcl.ExtCtrls, Data.DB, FireDAC.Comp.Client;

var
  Paginator: TPagination;
  Query: TFDQuery;
begin
  // Exemplo 1: sem painel
  Paginator := TPagination.Create(20); // 20 linhas por página

  // Exemplo 2: com painel
  Paginator := TPagination.Create(20, PanelPagination, 'Página: ');

  // Total de registros (obtido de um COUNT no banco)
  Paginator.TotalRecords := 1250;

  // Configura e calcula as páginas
  Paginator.SetPagination(1);

  // Usando no SQL:
  Query.Close;
  Query.SQL.Text :=
    'SELECT * FROM CLIENTES ' +
    'ORDER BY ID ' +
    Format('LIMIT %d OFFSET %d', [Paginator.MaxRows, Paginator.Offset]);
  Query.Open;

  // Avançando uma página
  Paginator.Skip();
  Query.SQL.Text :=
    'SELECT * FROM CLIENTES ' +
    'ORDER BY ID ' +
    Format('LIMIT %d OFFSET %d', [Paginator.MaxRows, Paginator.Offset]);
  Query.Open;

  // Retrocedendo
  Paginator.Rewind();

  // Exibindo dados atuais
  ShowMessage(Format('Página %d de %d',
    [Paginator.CurrentPage, Paginator.TotalPages]));

  // Liberação
  Paginator.Free;
end;

🧮 Como funciona Propriedade Descrição MaxRows Quantidade máxima de linhas por página TotalRecords Total de registros retornados do banco TotalPages Total de páginas calculadas automaticamente CurrentPage Página atual Offset Posição inicial para o SQL (LIMIT ... OFFSET) PanelCaption Texto exibido no painel (opcional) PanelVisible Define se o painel deve ser visível Panel Painel usado para exibir o status da página

🧩 Exemplo de SQL Paginado

delphi
SELECT *
FROM PRODUTOS
ORDER BY NOME
LIMIT :MaxRows OFFSET :Offset;

Query.ParamByName('MaxRows').AsInteger := Paginator.MaxRows; Query.ParamByName('Offset').AsInteger := Paginator.Offset;

🔧 Métodos Principais Método Descrição SetPagination(AInitialPage) Calcula total de páginas e inicia na página indicada Skip() Avança uma página Rewind() Retrocede uma página

🧾 Licença

Este projeto está licenciado sob os termos da Apache License 2.0

💡 Dica

Unit pode ser adiconada através do Boss. -- boss init -- boss instal https://github.com/mak58/PaginationGrid

Use a propriedade Offset diretamente no seu SQL para paginar registros sem precisar refazer cálculos. A classe TPagination mantém tudo sincronizado automaticamente.

🧑‍💻 Autor

[Marcio Koehler] Delphi Developer 📧 [marcio_koehlerl@live.com]

🌐 GitHub: github.com/mak58