wsbrowse.pas

来自「企业ERP管理系统」· PAS 代码 · 共 592 行 · 第 1/2 页

PAS
592
字号
    FilterDialog.FilterFields := GetFilterFields;
    FFilterDialogList.Add(FilterDialog);
  end
  else begin
    NewFilterDialog := TQLDBFilterDialog.Create(Self);
    NewFilterDialog.FilterStrings.Assign(FilterDialog.FilterStrings);
//    FilterDialog.DataSet := ADataSet;
    FilterDialog := NewFilterDialog;
    FilterDialog.FilterFields := GetFilterFields;
    FFilterDialogList.Add(FilterDialog);
  end;
  FilterDataSet := TDataSetClass(ADataSet.ClassType).Create(Self);
  FilterDataSet.Tag := GetNextTag;
  FilterDataSet.Name := 'FilterDataSet' + IntToStr(FilterDataSet.Tag);
  if FilterDataSet is TCustomADODataSet then
  begin
    TCustomADODataSet(FilterDataSet).Connection := TCustomADODataSet(ADataSet).Connection;
    if FilterDataSet is TADODataSet then
    begin
      TADODataSet(FilterDataSet).CommandText := TADODataSet(ADataSet).CommandText;
      TADODataSet(FilterDataSet).Parameters.Assign(TADODataSet(ADataSet).Parameters);
    end
    else if FilterDataSet is TADOQuery then
    begin
      TADOQuery(FilterDataSet).SQL.Assign(TADOQuery(ADataSet).SQL);
      TADOQuery(FilterDataSet).Parameters.Assign(TADOQuery(ADataSet).Parameters);
    end
    else if FilterDataSet is TADOTable then
      TADOTable(FilterDataSet).TableName := TADOTable(ADataSet).TableName
    else if FilterDataSet is TADOStoredProc then
      TADOStoredProc(FilterDataSet).ProcedureName := TADOStoredProc(ADataSet).ProcedureName;
  end;
  FilterDataSet.Open;
  for I := 0 to FilterDataSet.FieldCount - 1 do
  begin
    with FilterDataSet.Fields[I] do
    begin
      Field := ADataSet.FindField(FieldName);
      Visible := (Field <> nil) and Field.Visible;
      if Field <> nil then
      begin
        DisplayLabel := ADataSet.FieldByName(FieldName).DisplayLabel;
        if IsPublishedProp(FilterDataSet.Fields[I], 'currency') and
          (GetOrdProp(ADataSet.FieldByName(FieldName), 'currency') <> 0) then
          SetOrdProp(FilterDataSet.Fields[I], 'currency', 1);

        if IsPublishedProp(FilterDataSet.Fields[I], 'DisplayFormat') then
          SetStrProp(FilterDataSet.Fields[I], 'DisplayFormat',
            GetStrProp(ADataSet.FieldByName(FieldName), 'DisplayFormat'));
      end;
    end;
  end;
  FilterDialog.DataSet := FilterDataSet;

  Result := FilterDialog.Execute;
  if Result then
  begin
    with TTabSheet.Create(Self) do
    begin
      PageControl := Self.PageControl;
      Tag := FilterDataSet.Tag;
      Caption := '查询 ' + IntToStr(Tag);
      S := Caption;
      if InputQuery('查询', '查询结果名称:', S) then
        Caption := S;
    end;
    PageControl.ActivePageIndex := PageControl.PageCount - 1;
    PageControl.OnChange(PageControl);
  end
  else begin
    FilterDialog.DataSet := nil;
    FilterDataSet.Free;
  end;
  hint :=s;
end;

procedure TWSBrowseForm.ExportActionExecute(Sender: TObject);
begin
  { DONE -cUI : 添加导出 DBGrid 的内容的代码}
  ExportDBGridToExcel(DBGrid, GetKeyState(VK_SHIFT) and $80000 = $80000,
    Caption, Hint, DBGrid.Hint);
end;

procedure TWSBrowseForm.FiltrateActionExecute(Sender: TObject);
begin
  ExecuteFilterDialog(DataSet);
end;

procedure TWSBrowseForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if FormStyle = fsMDIChild then Action := caFree;
end;

procedure TWSBrowseForm.FormCreate(Sender: TObject);
begin
  FAllowSort := True;
  FFilterDialogList := TList.Create;
end;

procedure TWSBrowseForm.FormDestroy(Sender: TObject);
begin
  FFilterDialogList.Free;
end;

function TWSBrowseForm.GetDataSet: TDataSet;
begin
  Result := DataSource.DataSet;
end;

procedure TWSBrowseForm.InitReport(Report: TQuickRep);
begin
end;

procedure TWSBrowseForm.Print(Preview: Boolean = False; ShowSetupDialog: Boolean = False);
begin
  with CreateQRBuilder do
  try
    Active := True;
    InitReport(TQuickRep(Report));
    if Preview then Report.PreviewModal
    else begin
      if ShowSetupDialog then Report.PrinterSetup;
      Report.Print;
    end;
  finally
    Free;
  end;
end;

procedure TWSBrowseForm.PrintActionExecute(Sender: TObject);
begin
  Print(False, False);
end;

procedure TWSBrowseForm.PrintPreviewActionExecute(Sender: TObject);
begin
  Print(True);
end;

procedure TWSBrowseForm.RefreshDataSet;
begin
  WSUtils.RefreshDataSet(DataSet);
end;

procedure TWSBrowseForm.TabSheetShow(Sender: TObject);
var
  I, DSTag: Integer;
  TabSheet: TTabSheet;
begin
  TabSheet := PageControl.ActivePage;
  if TabSheet <> nil then
  begin
    DSTag := TabSheet.Tag;
    for I := 0 to ComponentCount - 1 do
      if (Components[I].Tag = DSTag) and (Components[I] is TDataSet) then
      begin
        if not TDataSet(Components[I]).Active then
        begin
          TDataSet(Components[I]).Open;
          RefreshAvailableFields;
        end;
        DataSource.DataSet := TDataSet(Components[I]);
        Break;
      end;
  end;
end;

procedure TWSBrowseForm.FormShow(Sender: TObject);
begin
  PageControl.OnChange(PageControl);
end;

procedure TWSBrowseForm.RefreshActionExecute(Sender: TObject);
begin
  RefreshDataSet;
end;

function TWSBrowseForm.CreateEditForm: TWSEditForm;
begin
  raise Exception.Create('No edit form');
end;

procedure TWSBrowseForm.AddNewActionExecute(Sender: TObject);
begin
  with CreateEditForm do
  try
    if Enter then RefreshDataSet;
  finally
    Free;
  end;
end;

procedure TWSBrowseForm.EditActionExecute(Sender: TObject);
begin
  with CreateEditForm do
  try
    if Edit(GetEditParams) then RefreshDataSet;
  finally
    Free;
  end;
end;

function TWSBrowseForm.GetEditParams: Variant;
begin
  if DataSet.FindField('ID')<> nil   then
      Result := DataSet.fieldbyname('ID').Value
  else Result := DataSet.Fields[0].Value;
end;

procedure TWSBrowseForm.ExitActionExecute(Sender: TObject);
begin
  Close;
end;

procedure TWSBrowseForm.DBGridDblClick(Sender: TObject);
begin
  inherited;
  EditAction.Execute;
end;

function TWSBrowseForm.GetNextTag: Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := 0 to PageControl.PageCount - 1 do
    if PageControl.Pages[I].Tag >= Result then Result := PageControl.Pages[I].Tag + 1;
end;

procedure TWSBrowseForm.wsbrowsepopnRenameClick(Sender: TObject);
var s :string;
begin
  inherited;
  if PageControl.ActivePageIndex =0 then exit;
  InputQuery(PageControl.ActivePage.Caption, PageControl.ActivePage.Caption+'  改为:     ', S);
  if s<>'' then  PageControl.ActivePage.Caption :=s;
end;

procedure TWSBrowseForm.wsbrowsepopDeleteClick(Sender: TObject);
begin
  inherited;
  if PageControl.ActivePageIndex =0 then exit;
//  FilterDataSet.Tag := PageControl.ActivePageIndex;
//  FilterDataSet.Destroy;
  PageControl.ActivePage.Visible :=False;
end;

procedure TWSBrowseForm.DBGridKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
  if ([ssCtrl] = Shift) and (Key = Ord('C')) and (DBGrid.SelectedField <> nil) then
    Clipboard.AsText := DBGrid.SelectedField.DisplayText;
end;

procedure TWSBrowseForm.CustomizeViewActionExecute(Sender: TObject);
var
  I: Integer;
begin
  inherited;
  if FAvailableFields = '' then  RefreshAvailableFields;
  with TQLDBCustomViewDialog.Create(Self) do
  try
    DataSet := Self.DataSet;
    AvailableFields := FAvailableFields;
    if Execute then
    for I := 0 to DBGrid.Columns.Count - 1 do
      if DBGrid.Columns[I].Field <> nil then
        DBGrid.Columns[I].Visible := DBGrid.Columns[I].Field.Visible;
  finally
    Free;
  end;
end;

procedure TWSBrowseForm.RefreshAvailableFields;
var
  I: Integer;
begin
  FAvailableFields := '';
  if DataSet <> nil then
    with DataSet do
      for I := 0 to FieldCount - 1 do
          if Fields[I].Visible then
            FAvailableFields := FAvailableFields + Fields[I].FieldName + ';';
end;

procedure TWSBrowseForm.ShowChartActionExecute(Sender: TObject);
begin
  inherited;
  ExportDBGridToExcel(DBGrid, GetKeyState(VK_SHIFT) and $80000 = $80000,
    Caption, Hint, DBGrid.Hint, True);
end;

end.

⌨️ 快捷键说明

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