⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.pas

📁 delphi,实现ado分页实现。这是转载。
💻 PAS
字号:
unit MainFrm;

interface

uses
  Classes, Controls, Forms, Grids, ToolWin, ComCtrls, StdCtrls, ExtCtrls, DB,
  ADODB;

type
  TfrmMain = class(TForm)
    cnn: TADOConnection;
    rst: TADODataSet;
    pnlNavigate: TPanel;
    btnFirst: TButton;
    btnPrior: TButton;
    btnNext: TButton;
    btnLast: TButton;
    edtPageNO: TEdit;
    sgData: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure btnFirstClick(Sender: TObject);
    procedure edtPageNOKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    FPageNo: Integer;
    procedure SetPageNo(Value: Integer);
  public
    property PageNo: Integer read FPageNo write SetPageNo;
  end;

var
  frmMain: TfrmMain;

implementation

uses
  Windows, SysUtils;

{$R *.dfm}

const
  PAGE_SIZE = 6;

procedure TfrmMain.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  SetWindowLong(edtPageNO.Handle, GWL_STYLE, GetWindowLong(edtPageNo.Handle,
    GWL_STYLE) or ES_CENTER or ES_NUMBER);
  rst.Active := True;
  rst.Recordset.PageSize := PAGE_SIZE;
  sgData.ColCount := rst.FieldCount + 1;
  for i := 0 to rst.FieldCount - 1 do
  begin
    sgData.ColWidths[i + 1] := rst.Fields[i].DisplayWidth * Canvas.TextWidth('0');
    sgData.Cells[i + 1, 0] := rst.Fields[i].DisplayName;
  end;
  sgData.Cells[0, 0] := '序号';
  PageNo := 1;
end;

procedure TfrmMain.btnFirstClick(Sender: TObject);
begin
  if Sender = btnFirst then
    PageNo := 1
  else if Sender = btnPrior then
    PageNo := PageNo - 1
  else if Sender = btnNext then
    PageNo := PageNo + 1
  else PageNo := rst.Recordset.PageCount;
end;

procedure TfrmMain.edtPageNOKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if edtPageNO.Text <> '' then
    PageNo := StrToInt(edtPageNO.Text);
end;

procedure TfrmMain.SetPageNo(Value: Integer);
const
  adStateOpen = $00000001;
var
  n, i, j: Integer;
begin
  with rst.Recordset do
    if (FPageNo <> Value) and (Value >= 1) and (Value <= PageCount) and
      (State = adStateOpen) then
    begin
      FPageNo := Value;
      AbsolutePage := FPageNo;
      n := (FPageNo - 1) * PAGE_SIZE;
      edtPageNo.Text := IntToStr(FPageNo);
      for i := 1 to PAGE_SIZE do
      begin
        sgData.RowCount := i + 1;
        sgData.Cells[0, i] := IntToStr(n + i);
        for j := 0 to Fields.Count - 1 do
          sgData.Cells[j + 1, i] := Fields[j].Value;
        MoveNext;
        if Eof then Exit;
      end;
    end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -