cxdxgridconverter.pas

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

PAS
1,743
字号
  ASummaryItems: TObject;
  AcxSummaryGroup: TcxDataSummaryGroup;
  AcxSummaryItem: TcxGridDBTableSummaryItem;
  I, J, K: Integer;
  ASeparator: string;
  AFieldName: string;
  AIsDefaultGroup: Boolean;
  AdxColumn: TComponent;
  ABeginText, AEndText: string;
begin
  ASeparator := Converter.GetStringProperty(nil, 'SummarySeparator', '');
  ASummaryGroups := Converter.GetClassProperty(nil, 'SummaryGroups');
  if ASummaryGroups <> nil then
  begin
    if ASummaryGroups is TCollection then
    with TCollection(ASummaryGroups) do
    begin
      for I := 0 to Count - 1 do
      begin
        ABeginText := Converter.GetStringProperty(Items[I], 'BeginSummaryText', '');
        AEndText := Converter.GetStringProperty(Items[I], 'EndSummaryText', '');
        AIsDefaultGroup := Converter.GetBooleanProperty(Items[I], 'DefaultGroup', True);
        if AIsDefaultGroup then
        begin
          cxGridView.DataController.Summary.DefaultGroupSummaryItems.BeginText := ABeginText;
          cxGridView.DataController.Summary.DefaultGroupSummaryItems.EndText := AEndText;
          cxGridView.DataController.Summary.DefaultGroupSummaryItems.Separator := ASeparator;
          AcxSummaryGroup := nil;
        end
        else
        begin
          AcxSummaryGroup := cxGridView.DataController.Summary.SummaryGroups.Add;
          AcxSummaryGroup.SummaryItems.BeginText := ABeginText;
          AcxSummaryGroup.SummaryItems.EndText := AEndText;
          AcxSummaryGroup.SummaryItems.Separator := ASeparator;
        end;
        if AcxSummaryGroup <> nil then
          FcxSummaryGroups.AddObject(Converter.GetStringProperty(Items[I], 'Name', ''), AcxSummaryGroup);
        ASummaryItems := Converter.GetClassProperty(Items[I], 'SummaryItems');
        if ASummaryItems <> nil then
        begin
          if ASummaryItems is TCollection then
          with TCollection(ASummaryItems) do
          begin
            for J := 0 to Count - 1 do
            begin
              if AIsDefaultGroup then
                AcxSummaryItem := TcxGridDBTableSummaryItem(cxGridView.DataController.Summary.DefaultGroupSummaryItems.Add)
              else
                AcxSummaryItem := TcxGridDBTableSummaryItem(AcxSummaryGroup.SummaryItems.Add);
              AcxSummaryItem.Column := nil;
              AdxColumn := GetColumn(Converter.GetStringProperty(Items[J], 'ColumnName', ''));
              if AdxColumn <> nil then
              begin
                AFieldName := Converter.GetStringProperty(AdxColumn, 'FieldName', '');
                for K := 0 to cxGridView.ColumnCount - 1 do
                  if TcxGridDbTableView(cxGridView).Columns[K].DataBinding.FieldName = AFieldName then
                  begin
                    AcxSummaryItem.Column := TcxGridDBTableView(cxGridView).Columns[K];
                    AcxSummaryItem.Position := spFooter;
                    Break;
                  end;
              end;
              AcxSummaryItem.FieldName := Converter.GetStringProperty(Items[J], 'SummaryField', '');
              AcxSummaryItem.Format := Converter.GetStringProperty(Items[J], 'SummaryFormat', AcxSummaryItem.Format);
              AcxSummaryItem.Kind := GetSummaryKind(Converter.GetEnumProperty(Items[J], 'SummaryType'));
            end;
          end;
        end;
      end;
    end;
  end;
end;

procedure TcxRealConverterToTableView.ImportSyncMode(const AValue: Boolean);
begin
  TcxGridDBTableView(cxGridView).DataController.DataModeController.SyncMode := AValue;
end;

function TcxRealConverterToTableView.TestPreviewFieldName(AIndex: Integer;
  const APreview: string): Boolean;
begin
  Result := TcxGridDBTableView(cxGridView).Columns[AIndex].DataBinding.FieldName = APreview;
end;

function TcxRealConverterToTableView.DefaultPreviewFont(AFont: TFont): Boolean;
begin
  if AFont = nil then
  begin
    Result := True;
    Exit;
  end;
  with AFont do
    Result :=
      (Pitch = DefFontData.Pitch) and
      (Style = DefFontData.Style) and
      (Charset = DefFontData.Charset) and
      (Name = DefFontData.Name) and
      (Color = clBlue) and
      (Size = 8);
end;

function TcxRealConverterToTableView.GetColumn(const AName: string): TComponent;
var
  AColumns: TList;
  I: Integer;
begin
  Result := nil;
  AColumns := TList.Create;
  try
    GetColumns(AColumns);
    for I := 0 to AColumns.Count - 1 do
      if Converter.GetStringProperty(TComponent(AColumns[I]), 'Name', '') = AName then
      begin
        Result := TComponent(AColumns[I]);
        Break; 
      end;
  finally
    AColumns.Free;
  end;
end;

procedure TcxRealConverterToTableView.GetColumns(AColumns: TList);
var
  AForm: TComponent;
  I: Integer;
begin
  AForm := Converter.Source.Owner;
  for I := 0 to AForm.ComponentCount - 1 do
  begin
    if AForm.Components[I].GetParentComponent = Converter.Source then
      AColumns.Add(AForm.Components[I]);
  end;
  if AColumns.Count = 0 then
  begin
    for I := 0 to Converter.Source.ComponentCount - 1 do
    begin
      if Converter.Source.Components[I].GetParentComponent = Converter.Source then
        AColumns.Add(Converter.Source.Components[I]);
    end;
  end;
end;

function TcxRealConverterToTableView.GetCXColumnByFieldName(const AFieldName: string): TcxGridDBColumn;
var
  I: Integer;
begin
  Result := nil;
  for I := 0 to cxGridView.ColumnCount - 1 do
  begin
    if TcxGridDBTableView(cxGridView).Columns[I].DataBinding.FieldName = AFieldName then
    begin
      Result := TcxGridDBTableView(cxGridView).Columns[I];
      Break;
    end;
  end;
end;

function TcxRealConverterToTableView.GetcxGrid: TcxCustomGrid;
begin
  Result := Converter.Destination;
end;

function TcxRealConverterToTableView.GetcxGridView: TcxGridTableView;
begin
  Result := Converter.cxGridView as TcxGridTableView;
end;

function TcxRealConverterToTableView.ConvertColumnShowEditButtons(
  const AStyle: string): TcxGridItemShowEditButtons;
begin
  if AStyle = 'sbDefault' then
    Result := isebDefault
  else if AStyle = 'sbAlways' then
    Result := isebAlways
  else if AStyle = 'sbNone' then
    Result := isebNever
  else
    Result := isebDefault;
end;

function TcxRealConverterToTableView.GetSummaryKind(
  const AType: string): TcxSummaryKind;
begin
  if AType = 'cstNone' then
    Result := skNone
  else if AType = 'cstAvg' then
    Result := skAverage
  else if AType = 'cstCount' then
    Result := skCount
  else if AType = 'cstMax' then
    Result := skMax
  else if AType = 'cstMin' then
    Result := skMin
  else if AType = 'cstSum' then
    Result := skSum
  else
    Result := skNone;
end;

{ TcxRealConverterToBandedTableView }

procedure TcxRealConverterToBandedTableView.DoImport;
begin
  TcxGridDBBandedTableView(cxGridView).DataController.DataSource :=
    Converter.GetClassProperty(nil, 'DataSource') as TDataSource;
  ImportDXOptionsView;
  ImportDXFilter;
  ImportBands;
  ImportColumns;
  TcxGridDBBandedTableView(cxGridView).DataController.KeyFieldNames :=
    Converter.GetStringProperty(nil, 'KeyField', '');
  ImportGrid;
end;

procedure TcxRealConverterToBandedTableView.DoImportStyles;
begin
  ImportGridStyles;
  ImportBandsStyles;
  ImportColumnsStyles;
end;

procedure TcxRealConverterToBandedTableView.AssignColumn(AColumn: TcxGridColumn;
  ADXColumn: TObject; AIndex: Integer);
begin
  with TcxGridDBBandedColumn(AColumn) do
  begin
    Position.BandIndex := Converter.GetIntegerProperty(ADXColumn, 'BandIndex', Position.BandIndex);
    Position.ColIndex := Converter.GetIntegerProperty(ADXColumn, 'ColIndex', Position.ColIndex);
    Options.VertSizing := Converter.GetBooleanProperty(ADXColumn, 'Sizing', Options.VertSizing);
    Position.RowIndex := Converter.GetIntegerProperty(ADXColumn, 'RowIndex', Position.RowIndex);
  end;
  inherited AssignColumn(AColumn, ADXColumn, AIndex);
end;

procedure TcxRealConverterToBandedTableView.ImportAutoDataSetFilter(const AValue: Boolean);
begin
  TcxGridDBBandedTableView(cxGridView).DataController.Filter.AutoDataSetFilter := AValue;
end;

procedure TcxRealConverterToBandedTableView.ImportColumnSummaryGroups;
  function GetCXColumnByFieldName(const AFieldName: string): TcxGridDBBandedColumn;
  var
    I: Integer;
  begin
    Result := nil;
    for I := 0 to cxGridView.ColumnCount - 1 do
    begin
      if TcxGridDbBandedTableView(cxGridView).Columns[I].DataBinding.FieldName = AFieldName then
      begin
        Result := TcxGridDbBandedTableView(cxGridView).Columns[I];
        Break;
      end;
    end;
  end;
var
  AColumns: TList;
  AColumn: TcxGridDBBandedColumn;
  ASummaryField: string;
  ASummaryFormat: string;
  ASummaryGroupName: string;
  ASummaryType: string;
  ASummaryGroup: TcxDataSummaryGroup;
  ASummaryItem: TcxGridDBTableSummaryItem;
  ALink: TcxGridTableSummaryGroupItemLink;
  AIndex: Integer;
  I: Integer;
begin
  AColumns := TList.Create;
  try
    GetColumns(AColumns);
    for I := 0 to AColumns.Count - 1 do
    begin
      AColumn := GetCXColumnByFieldName(Converter.GetStringProperty(AColumns[I], 'FieldName', ''));
      if AColumn = nil then
        Continue;
      ASummaryField := Converter.GetStringProperty(TComponent(AColumns[I]), 'SummaryField', '');
      ASummaryFormat := Converter.GetStringProperty(TComponent(AColumns[I]), 'SummaryFormat', '');
      ASummaryType := Converter.GetEnumProperty(TComponent(AColumns[I]), 'SummaryType');
      ASummaryGroupName := Converter.GetStringProperty(TComponent(AColumns[I]), 'SummaryGroupName', '');
      if ASummaryGroupName <> '' then
      begin
        if FcxSummaryGroups.Find(ASummaryGroupName, AIndex) then
        begin
          ASummaryGroup := TcxDataSummaryGroup(FcxSummaryGroups.Objects[AIndex]);
          ALink := TcxGridTableSummaryGroupItemLink(ASummaryGroup.Links.Add);
          ALink.Column := AColumn;
        end;
      end;
      if (ASummaryField <> '') and (ASummaryType <> 'cstNone') then
      begin
        ASummaryGroup := cxGridView.DataController.Summary.SummaryGroups.Add;
        ASummaryItem := TcxGridDBTableSummaryItem(ASummaryGroup.SummaryItems.Add);
        ASummaryItem.FieldName := ASummaryField;
        ASummaryItem.Format := ASummaryFormat;
        ASummaryItem.Kind := GetSummaryKind(ASummaryType);
        ALink := TcxGridTableSummaryGroupItemLink(ASummaryGroup.Links.Add);
        ALink.Column := AColumn;
      end;
    end;
  finally
    AColumns.Free;
  end;
end;

procedure TcxRealConverterToBandedTableView.AssignDXOptionsView(AList: TStringList);
var
  I: Integer;
begin
  with cxGridView do
    FBandHeaderWidth := AList.Find('edgoBandHeaderWidth', I);
  inherited AssignDXOptionsView(AList);
end;

procedure TcxRealConverterToBandedTableView.AssignGrid;
begin
  with cxGridView do
  begin
    OptionsView.BandHeaders := Converter.GetBooleanProperty(nil, 'ShowBands', OptionsView.BandHeaders);  
    OptionsView.FixedBandSeparatorWidth := Converter.GetIntegerProperty(nil, 'FixedBandLineWidth',
      OptionsView.FixedBandSeparatorWidth);
  end;
  inherited AssignGrid;
end;

procedure TcxRealConverterToBandedTableView.AssignSummaryItem(AColumn: TcxGridColumn; ADXColumn: TObject);
var
  ASummaryFooterType: string;
  AcxSummaryFooterItem: TcxGridDBTableSummaryItem;
begin
  ASummaryFooterType := Converter.GetEnumProperty(ADXColumn, 'SummaryFooterType');
  if ASummaryFooterType <> 'cstNone' then
  begin
    AcxSummaryFooterItem := TcxGridDBTableSummaryItem(
      TcxGridDBBandedTableView(cxGridView).DataController.Summary.FooterSummaryItems.Add);
    AcxSummaryFooterItem.FieldName := Converter.GetStringProperty(ADXColumn, 'SummaryFooterField', '');
    AcxSummaryFooterItem.Format := Converter.GetStringProperty(ADXColumn, 'SummaryFooterFormat',
      AcxSummaryFooterItem.Format);
    AcxSummaryFooterItem.Kind := GetSummaryKind(ASummaryFooterType);
    AcxSummaryFooterItem.Column := AColumn;
  end;
end;

function TcxRealConverterToBandedTableView.CreateColumn: TcxGridColumn;
begin
  Result := TcxGridDBBandedTableView(cxGridView).CreateColumn;
end;

procedure TcxRealConverterToBandedTableView.ImportColumnsStyles;

⌨️ 快捷键说明

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