自定義數據導航 、增刪改

 自定義數據導航 、增刪改:效果如下圖,僅當做筆記本,老鳥勿噴:

代碼如下:

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    nbFirst: TButton;
    nbPrior: TButton;
    nbNext: TButton;
    nbLast: TButton;
    nbDelete: TButton;
    Panel1: TPanel;
    DataSource1: TDataSource;
    nbEdit: TButton;
    nbInsert: TButton;
    nbPost: TButton;
    nbCancel: TButton;
    DBEdit1: TDBEdit;
    NorthwindConnection: TFDConnection;
    EmployeesTable: TFDQuery;
    CustomersTable: TFDQuery;
    DataSource2: TDataSource;

    procedure DataSource1StateChange(Sender: TObject);

    procedure nbFirstClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DataSource1StateChange(Sender: TObject);
var
  CanModify: Boolean;
begin
 //TfunctionTable.Insert;
{設置導航按鈕的有效性}
nbFirst.Enabled := (Not DataSource1.DataSet.Bof) and (Not nbpost.Enabled) ;
nbLast.Enabled := (Not DataSource1.DataSet.Eof) and (Not nbpost.Enabled);
nbPrior.Enabled := (nbFirst.Enabled) and (Not nbpost.Enabled);
nbNext.Enabled := (nbLast.Enabled) and (Not nbpost.Enabled);

 nbpost.Enabled := DataSource1.DataSet.State in [dsInsert,dsEdit];
 nbinsert.Enabled := {bCanNew and }Not nbpost.Enabled ;
 nbEdit.Enabled := {bCanModify and} Not nbpost.Enabled;
 nbCancel.Enabled := nbpost.Enabled ;
 //nbDelete.Enabled := bCanDelete;
 //nbPrint.Enabled := bCanPrint;


end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  nbFirst.Click;
end;

procedure TForm1.nbFirstClick(Sender: TObject);
var
  UpEnable, DnEnable: Boolean;
  CanModify: Boolean;
  nav:boolean;
begin

   case (sender as tbutton).Tag    of
   1:    DataSource1.DataSet.First;
   2:    DataSource1.DataSet.Prior;
   3:    DataSource1.DataSet.Next;
   4:    DataSource1.DataSet.Last;
   5:    begin
         DataSource1.DataSet.INSERT;
         nav:=false;
         end;
   6:    begin
         DataSource1.DataSet.Edit;
         nav:=false;
         end;
   7:    DataSource1.DataSet.Delete;
   8:    begin
         DataSource1.DataSet.Post;
         nav:=true;
         end;
   9:    begin
         DataSource1.DataSet.Cancel;
          nav:=true;
         end;
   end;
  {Enabled   是導航各按鈕的ENABLED}
  CanModify := DataSource1.DataSet.Active and (Not nbpost.Enabled)  {DataSource1.DataSet.Modified};
  UpEnable :=  DataSource1.DataSet.Active and not DataSource1.DataSet.BOF;
  DnEnable :=  DataSource1.DataSet.Active and not DataSource1.DataSet.EOF;

  nbFirst.Enabled := UpEnable and nav;
  nbPrior.Enabled := UpEnable and nav;
  nbNext.Enabled := DnEnable  and nav;
  nbLast.Enabled := DnEnable  and nav;
end;


end.

 

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 525
  ClientWidth = 830
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 0
    Top = 106
    Width = 830
    Height = 137
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object Panel1: TPanel
    Left = 0
    Top = 0
    Width = 830
    Height = 41
    Align = alTop
    Caption = 'Panel1'
    TabOrder = 1
    object nbDelete: TButton
      Tag = 7
      Left = 327
      Top = 10
      Width = 64
      Height = 25
      Caption = 'nbDelete'
      TabOrder = 0
      OnClick = nbFirstClick
    end
    object nbFirst: TButton
      Tag = 1
      Left = 0
      Top = 10
      Width = 65
      Height = 25
      Caption = 'nbFirst'
      TabOrder = 1
      OnClick = nbFirstClick
    end
    object nbLast: TButton
      Tag = 4
      Left = 195
      Top = 10
      Width = 62
      Height = 25
      Caption = 'nbLast'
      TabOrder = 2
      OnClick = nbFirstClick
    end
    object nbNext: TButton
      Tag = 3
      Left = 130
      Top = 10
      Width = 67
      Height = 25
      Caption = 'nbNext'
      TabOrder = 3
      OnClick = nbFirstClick
    end
    object nbPrior: TButton
      Tag = 2
      Left = 65
      Top = 10
      Width = 64
      Height = 25
      Caption = 'nbPrior'
      TabOrder = 4
      OnClick = nbFirstClick
    end
    object nbEdit: TButton
      Tag = 6
      Left = 397
      Top = 10
      Width = 75
      Height = 25
      Caption = 'nbEdit'
      TabOrder = 5
      OnClick = nbFirstClick
    end
    object nbInsert: TButton
      Tag = 5
      Left = 263
      Top = 10
      Width = 58
      Height = 25
      Caption = 'nbInsert'
      TabOrder = 6
      OnClick = nbFirstClick
    end
    object nbPost: TButton
      Tag = 8
      Left = 456
      Top = 10
      Width = 67
      Height = 25
      Caption = 'nbPost'
      TabOrder = 7
      OnClick = nbFirstClick
    end
    object nbCancel: TButton
      Tag = 9
      Left = 529
      Top = 10
      Width = 75
      Height = 25
      Caption = 'nbCancel'
      TabOrder = 8
      OnClick = nbFirstClick
    end
  end
  object DBEdit1: TDBEdit
    Left = 8
    Top = 79
    Width = 121
    Height = 21
    DataField = 'LastName'
    DataSource = DataSource1
    TabOrder = 2
  end
  object DataSource1: TDataSource
    DataSet = EmployeesTable
    OnStateChange = DataSource1StateChange
    Left = 280
    Top = 80
  end
  object NorthwindConnection: TFDConnection
    Params.Strings = (
      'ConnectionDef=Northwind')
    Connected = True
    LoginPrompt = False
    Left = 245
    Top = 239
  end
  object EmployeesTable: TFDQuery
    Active = True
    Connection = NorthwindConnection
    SQL.Strings = (
      'SELECT * FROM Northwind.dbo.Employees')
    Left = 245
    Top = 287
  end
  object CustomersTable: TFDQuery
    Active = True
    Connection = NorthwindConnection
    SQL.Strings = (
      'SELECT * FROM Northwind.dbo.Customers')
    Left = 56
    Top = 395
  end
  object DataSource2: TDataSource
    DataSet = CustomersTable
    Left = 312
    Top = 328
  end
end

 

 

 

代碼簡單說明:

nbFirstClick 是把導航按鈕和增刪改幾個按鈕同時選擇起來,再單擊左側的ONclick即成了'按鈕組'CLICK

.再根據不同的tag,判斷出是哪個按鈕(tag 是自己根據需要輸入);代碼也可能有待完善的地方指教。

{procedure TDBNavigator.BtnClick(Index: TNavigateBtn);
begin
  if (DataSource <> nil) and (DataSource.State <> dsInactive) then
  begin
    if not (csDesigning in ComponentState) and Assigned(FBeforeAction) then
      FBeforeAction(Self, Index);
    with DataSource.DataSet do
    begin
      case Index of
        nbPrior: Prior;
        nbNext: Next;
        nbFirst: First;
        nbLast: Last;
        nbInsert: Insert;
        nbEdit: Edit;
        nbCancel: Cancel;
        nbPost: Post;
        nbRefresh: Refresh;
        nbDelete:
          if not FConfirmDelete or
            (MessageDlg(SDeleteRecordQuestion, mtConfirmation,
            mbOKCancel, 0) <> idCancel) then Delete;
        nbApplyUpdates: Self.ApplyUpdates;
        nbCancelUpdates: Self.CancelUpdates;
      end;
    end;
  end;
  if not (csDesigning in ComponentState) and Assigned(FOnNavClick) then
    FOnNavClick(Self, Index);
end;

 

procedure TDBNavigator.DataChanged;
var
  UpEnable, DnEnable: Boolean;
  CanModify: Boolean;
begin
  CanModify := Enabled and FDataLink.Active and FDataLink.DataSet.CanModify;
  UpEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.BOF;
  DnEnable := Enabled and FDataLink.Active and not FDataLink.DataSet.EOF;
  Buttons[nbFirst].Enabled := UpEnable;
  Buttons[nbPrior].Enabled := UpEnable;
  Buttons[nbNext].Enabled := DnEnable;
  Buttons[nbLast].Enabled := DnEnable;
  Buttons[nbDelete].Enabled := CanModify and not (FDataLink.DataSet.BOF and FDataLink.DataSet.EOF);
  Buttons[nbRefresh].Enabled := Enabled and (nbRefresh in VisibleButtons) and FDataLink.Active and FDataLink.DataSet.CanRefresh;
  Buttons[nbApplyUpdates].Enabled := CanModify and (nbApplyUpdates in VisibleButtons) and Self.CanApplyUpdates;
  Buttons[nbCancelUpdates].Enabled := CanModify and (nbCancelUpdates in VisibleButtons) and Self.CanCancelUpdates;
end;

procedure TDBNavigator.EditingChanged;
var
  CanModify: Boolean;
begin
  CanModify := Enabled and FDataLink.Active and FDataLink.DataSet.CanModify;
  Buttons[nbInsert].Enabled := CanModify;
  Buttons[nbEdit].Enabled := CanModify and not FDataLink.Editing;
  Buttons[nbPost].Enabled := CanModify and FDataLink.Editing;
  Buttons[nbCancel].Enabled := CanModify and FDataLink.Editing;
  Buttons[nbRefresh].Enabled := Enabled and (nbRefresh in VisibleButtons) and FDataLink.Active and FDataLink.DataSet.CanRefresh;
  Buttons[nbApplyUpdates].Enabled := CanModify and (nbApplyUpdates in VisibleButtons) and Self.CanApplyUpdates;
  Buttons[nbCancelUpdates].Enabled := CanModify and (nbCancelUpdates in VisibleButtons) and Self.CanCancelUpdates;
end;

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章