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 + -
显示快捷键?