0

我做了:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  DataTable.qOrders.Next;
end;

它可以工作,但问题是当我单击按钮到达最后一条记录时,该按钮没有被禁用,就像在TDBNavigator.

我是如何TSpeedButton像那样自动禁用和启用的TDBNavigator

4

2 回答 2

8

将 a 拖放TActionList到您的表单上并向其中添加标准数据集操作。将这些操作连接到您的数据集,并将您的快速按钮连接到适当的操作。这些标准操作将根据当前数据集状态处理启用状态。

于 2017-09-08T06:28:14.313 回答
1

这是一个简单的解决方案,非常适合我。

我有一个表单(frmMain)、数据集(dsWork)、数据源(srcWork)、网格和两个速度按钮(btnNext 和 btnPrior)。重要的部分在 TDataSource 的“OnDataChange”事件中。这是源代码:

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls, ExtCtrls;

type
  TfrmMain = class(TForm)
    btnNext: TButton;
    srcWork: TDataSource;
    dsWork: TTable;
    btnPrior: TButton;
    grdWork: TDBGrid;
    procedure btnNextClick(Sender: TObject);
    procedure btnPriorClick(Sender: TObject);
    procedure srcWorkDataChange(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnNextClick(Sender: TObject);
begin
   if not dsWork.Eof then dsWork.Next;
end;

procedure TfrmMain.btnPriorClick(Sender: TObject);
begin
   if not dsWork.Bof then dsWork.Prior;
end;

procedure TfrmMain.srcWorkDataChange(Sender: TObject; Field: TField);
begin
   btnNext.Enabled := not dsWork.Eof;
   btnPrior.Enabled := not dsWork.Bof;
end;

end.
于 2017-09-08T06:52:07.843 回答