cxdbnavigator.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 542 行 · 第 1/2 页

PAS
542
字号
    inherited Assign(Source);
end;

procedure TcxDBNavigatorButtons.ReleaseBookmark;
begin
  Bookmark := nil;
end;

procedure TcxDBNavigatorButtons.DoApplyFilter(Sender: TObject);
begin
  ClearFilterCriteria;
  TcxDBFilterControl(Sender).SaveToStream(FFilterCriteria);
  FFilterSetting := True;
  try
    if Assigned(FOnApplyFilter) then
      FOnApplyFilter(Self, TcxDBFilterControl(Sender))
    else
    begin
      DataSet.Filter := TcxDBFilterControl(Sender).GetFilterTextEx('[', ']');
      DataSet.Filtered := True;
    end;
  finally
    FFilterSetting := False;
  end;
end;

procedure TcxDBNavigatorButtons.DoShowFilterDialog(Sender: TObject);
var
  AFilterControl: TcxDBFilterControl;
begin
  AFilterControl := TfmFilterControlDialog(Sender).FilterControl as TcxDBFilterControl;
  if FFilterCriteria.Size > 0 then
  begin
    FFilterCriteria.Position := 0;
    AFilterControl.LoadFromStream(FFilterCriteria);
  end;
  if Assigned(OnShowFilterDialog) then
    OnShowFilterDialog(Self, AFilterControl);
  if not Assigned(FOnApplyFilter) then
    with AFilterControl.FilterOptions do
    begin
      SupportedBetween := False;
      SupportedIn := False;
      SupportedLike := False;
    end;
end;

function TcxDBNavigatorButtons.GetDataLink: TDataLink;
begin
  if Assigned(FOnGetDataLink) then
    Result := FOnGetDataLink
  else Result := nil;
end;

function TcxDBNavigatorButtons.GetDataSet: TDataSet;
begin
  if DataLink <> nil then
    Result := DataLink.DataSet
  else Result := nil;
end;

function TcxDBNavigatorButtons.GetInternalPageSize: Integer;
begin
  if PageSize > 0 then
    Result := PageSize
  else
    if (DataSet <> nil) then
      Result := TDataSetAccess(DataSet).BufferCount
    else
      Result := 0;
end;

procedure TcxDBNavigatorButtons.SetBookmark(Value: TBookmark);
begin
  if Value <> FBookmark then
  begin
    if FBookmark <> nil then
      if DataSet = nil then
        FreeMem(FBookmark)
      else
        DataSet.FreeBookmark(FBookmark);
    FBookmark := Value;
    Navigator.NavigatorButtonsStateChanged;
  end;
end;

procedure TcxDBNavigatorButtons.SetPageSize(Value: Integer);
begin
  if Value > - 1 then
    FPageSize := Value;
end;

procedure TcxDBNavigatorButtons.ShowFilter;
var
  AShowFilterEvent: TNotifyEvent;
begin
  AShowFilterEvent := DoShowFilterDialog;
  ExecuteDBFilterControlDialog(DataSet, Navigator.GetNavigatorLookAndFeel,
    DoApplyFilter, AShowFilterEvent);
end;

procedure TcxDBNavigatorButtons.DoButtonClick(ADefaultIndex: Integer);
begin
  if (DataLink = nil) or not DataLink.Active then
    Exit;
  case ADefaultIndex of
    NBDI_FIRST: DataSet.First;
    NBDI_PRIORPAGE: DataSet.MoveBy(-InternalPageSize);
    NBDI_PRIOR: DataSet.Prior;
    NBDI_LAST: DataSet.Last;
    NBDI_NEXTPAGE: DataSet.MoveBy(InternalPageSize);
    NBDI_NEXT: DataSet.Next;
    NBDI_INSERT: DataSet.Insert;
    NBDI_APPEND: DataSet.Append;
    NBDI_DELETE:
      if not ConfirmDelete or
        (MessageDlg(cxGetResourceString(@cxNavigator_DeleteRecordQuestion),
        mtConfirmation, mbOKCancel, 0) = ID_OK) then
          DataSet.Delete;
    NBDI_EDIT: DataSet.Edit;
    NBDI_POST: DataSet.Post;
    NBDI_CANCEL: DataSet.Cancel;
    NBDI_SAVEBOOKMARK: Bookmark := DataSet.GetBookmark;
    NBDI_GOTOBOOKMARK: DataSet.GotoBookmark(Bookmark);
    NBDI_REFRESH: DataSet.Refresh;
    NBDI_FILTER: ShowFilter;
  end;
end;

function TcxDBNavigatorButtons.GetButtonEnabled(ADefaultIndex: Integer): Boolean;
begin
  Result := IsNavigatorEnabled and (DataLink <> nil) and DataLink.Active;
  if Result then
  begin
    case ADefaultIndex of
      NBDI_FIRST, NBDI_PRIOR, NBDI_PRIORPAGE: Result := not DataSet.Bof;
      NBDI_LAST, NBDI_NEXT, NBDI_NEXTPAGE: Result := not DataSet.Eof;
      NBDI_INSERT, NBDI_APPEND: Result := DataSet.CanModify;
      NBDI_DELETE: Result := DataSet.CanModify and
                  not (DataSet.BOF and DataSet.EOF);
      NBDI_EDIT: Result := DataSet.CanModify and not DataLink.Editing;
      NBDI_POST, NBDI_CANCEL:  Result := DataSet.CanModify and DataLink.Editing;
      NBDI_GOTOBOOKMARK: Result := Bookmark <> nil;
    end;
  end;
end;

procedure TcxDBNavigatorButtons.CheckBookmark;
begin
  if (Bookmark <> nil) and not DataSet.BookmarkValid(Bookmark) then
    ReleaseBookmark;
end;

procedure TcxDBNavigatorButtons.ClearFilterCriteria;
begin
  if not FFilterSetting then
    FFilterCriteria.Clear;
end;

{ TcxCustomDBNavigator }

constructor TcxCustomDBNavigator.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDataLink := TcxDBNavigatorDataLink.Create(Self);
end;

destructor TcxCustomDBNavigator.Destroy;
begin
  FreeAndNil(FDataLink);
  inherited Destroy;
end;

procedure TcxCustomDBNavigator.DoApplyFilter(Sender: TObject;
  AFilterControl: TcxDBFilterControl);
begin
  if Assigned(FOnApplyFilter) then
    FOnApplyFilter(Self, AFilterControl);
end;

procedure TcxCustomDBNavigator.DoShowFilterDialog(Sender: TObject;
  AFilterControl: TcxDBFilterControl);
begin
  if Assigned(FOnShowFilterDialog) then
    FOnShowFilterDialog(Self, AFilterControl);
end;

function TcxCustomDBNavigator.GetButtons: TcxDBNavigatorButtons;
begin
  Result := TcxDBNavigatorButtons(CustomButtons);
end;

function TcxCustomDBNavigator.GetDataLink: TDataLink;
begin
  Result := FDataLink;
end;

function TcxCustomDBNavigator.GetDataSource: TDataSource;
begin
  Result := FDataLink.DataSource;
end;

function TcxCustomDBNavigator.GetDataSet: TDataSet;
begin
  Result := FDataLink.DataSet;
end;

procedure TcxCustomDBNavigator.SetButtons(Value: TcxDBNavigatorButtons);
begin
  CustomButtons.Assign(Value);
end;

procedure TcxCustomDBNavigator.SetDataSource(Value: TDataSource);
begin
  if DataSource <> Value then
  begin
    {$IFDEF DELPHI5}
    if (DataSource <> nil) and not (csDestroying in DataSource.ComponentState) then
      DataSource.RemoveFreeNotification(Self);
    {$ENDIF}
    FDataLink.DataSource := Value;
    if (DataSource <> nil) then
      DataSource.FreeNotification(Self);
  end;
end;

procedure TcxCustomDBNavigator.SetOnApplyFilter(Value: TcxDBNavigatorFilterEvent);
begin
  FOnApplyFilter := Value;
  if Assigned(FOnApplyFilter) then
    Buttons.OnApplyFilter := DoApplyFilter
  else
    Buttons.OnApplyFilter := nil;
end;

procedure TcxCustomDBNavigator.SetOnShowFilterDialog(Value: TcxDBNavigatorFilterEvent);
begin
  FOnShowFilterDialog := Value;
  if Assigned(FOnShowFilterDialog) then
    Buttons.OnShowFilterDialog := DoShowFilterDialog
  else
    Buttons.OnShowFilterDialog := nil;
end;

function TcxCustomDBNavigator.CreateButtons: TcxCustomNavigatorButtons;
begin
  Result := TcxDBNavigatorButtons.Create(Self);
  TcxDBNavigatorButtons(Result).OnGetDataLink := GetDataLink;
end;

procedure TcxCustomDBNavigator.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (FDataLink <> nil)
    and (AComponent = DataSource) then
    DataSource := nil;
end;

procedure TcxCustomDBNavigator.DataSetActiveChanged;
begin
  Buttons.ClearFilterCriteria;
  Buttons.ReleaseBookmark;
end;

procedure TcxCustomDBNavigator.DataSetDataChanged;
begin
  Buttons.CheckBookmark;
end;

end.

⌨️ 快捷键说明

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