zoukankan      html  css  js  c++  java
  • DBGridEh用法总结三(PivotGrid的汉化)

    数据库字段一般都是英文,不能直接展示给用户,而应该显示中文含义给用户。需要汉化两部分,一是设计用的字段汉化,二是表格区显示内容的汉化。


    1、 字段汉化

    设计工具(PivotGridToolBoxEh1)中显示字段中文含义,是通过数据集字段的DisplayLabel属性实现,只需要正确设置DisplayLabel即可。

    一种方法运行期动态指定,是把字段名和中文含义保存在数据库中,需要的时候动态从数据库取。
    另一种方法是设计期静态指定,是在设计期设置每个字段的中文含义。
    我的程序中采用的是第一种方法。先创建数据表格(DBGridEh),并设置每一列的标题。在数据打开之后按表格的标题设置数据集字段的DisplayLable。
    for I := 0 to DBGridEh1.FieldCount - 1 do
    begin
      DBGridEh1.Columns[i].Field.DisplayLabel := DBGridEh1.Columns[i].Title.Caption;
    end;
    2、 表格汉化

    显示统计结果的表格PivotGridEh中老是显示字段名,这样对普通用户使用很不方便。通过下面事件实现英文字段的汉化,显示中文含义,做如下修改即可实现。

    procedure TCustomPivotGridEh.BuildGridArrayRowsMeasures;


    for v := 0 to ActualValueFields.Count-1 do
        begin
          PivotCel := PivotGridArray[ip + ActualRowFlds.Count + v, ActualColFlds.Count + 1];
          PivotCel.CelType := sctValuesColCaptionEh;
          PivotCel.Value := //ActualValueFields[v].PivotFieldName;
          //下面这句话,可以实现表格中字段名的中文汉化
    PivotDataSource.PivotFields.FindFieldByName(ActualValueFields[v].PivotFieldName).DisplayName;
        end;

    备注:

    这样修改后,用控件本身的打印功能,也可以正常显示汉化后的字段(按现在这样修修改之前也找到的别的方法,虽然可以解决表格上显示的问题,但是打印时还是英文,进而才找到现在的方案)。
    打印代码如下:

    procedure TQueryFrm.BtnPrintClick(Sender: TObject);
    begin
      inherited;
      PivotGridEh1.PrintService.PageHeader.CenterText := self.Caption + '分组统计';
      PivotGridEh1.PrintService.Preview;
    end;


    3、导出Excel格式与显示不一致。修改下面过程

    function ExportPivotGridEhToOleExcel(Grid:TCustomPivotGridEh;

     Options: TPivotGridExportAsOLEXLSOptionsEh

    // ;const FileName: String = ''

      ):Variant;

    //省略

      for i := 0 to Grid.FullColCount-1 do

      begin

        for j := 0 to Grid.FullRowCount-1 do

        begin

          PivotCel := Grid.VisPivotGridArray[i, j];

          if PivotCel.CelType in [sctAxisValueEh,sctValuesColCaptionEh] then

          begin

            Grid.FillAxisValueCellParams(DrPar, i,j, EmptyRect, [], PivotCel);

            FVarValues[j, i] := DrPar.DisplayValue;

          end else //确保导出内容与显示一模一样

            if PivotCel.CelType in [sctDataEh,sctHorzAggregateData, sctVertAggregateData] then

            begin

              Grid.FillDataCellParams(DrPar, i, j,EmptyRect, [], PivotCel);

              FVarValues[j, i] :=DrPar.DisplayValue;

            End  else

              FVarValues[j, i] := PivotCel.Value;//之前只有这一句

        end;

      end;

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    Docker的安装、配置及其基本使用
    Java提升七:注解
    Java提升六:泛型
    Java提升五:反射与动态代理
    MySQL中如何将主键默认值设为UUID()
    图解Mybatis框架原理及使用
    Java提升四:Stream流
    Java提升三:函数式接口
    Java提升二:Lambda表达式与方法引用
    java提升一:内部类
  • 原文地址:https://www.cnblogs.com/jijm123/p/14919998.html
Copyright © 2011-2022 走看看