表单插件-账表-千分符(更新【基本通用】)原创
金蝶云社区-儒雅的大凯文
儒雅的大凯文
4人赞赏了该文章 34次浏览 未经作者许可,禁止转载编辑于2024年12月14日 16:55:07

这两天要开发自定义报表,使用简单账表进行开发。开发过程中,客户发现数值列没有千分符,不利于查看,不直观。然后就针对某一张报表进行开发表单插件,进行数值列千分符的处理。然后发现每个报表(财务报表颇多)都要千分符处理的要求,处理千分符逻辑是一样的。难道每个报表都写一个表单插件?No,显然不符合多年软件Teacher的风格,所以写了一个报表通用的处理千分符的插件代码(思路用到了正则表达式)。给新手小虾米们参考参考。交流QQ:87283202   凯文

修改1:

1、过滤掉序号列的处理

2、只对数值类型的decimal,float,int进行处理

修改2:

1、合计列进行千分符处理


/// <summary>

/// 【账表表单插件】数字显示千分位

/// </summary>

[Description("【账表表单插件】数字显示千分位"), HotUpdate]

public class Common_AddFormatQianFenFu : AbstractSysReportPlugIn

{

     protected string CONST_SEQ_NAME = "FIDENTITYID";

     /// <summary>

     /// 格式化-处理列值

     /// </summary>

     /// <param name="args"></param>

     public override void FormatCellValue(FormatCellValueArgs args)

      {

          base.FormatCellValue(args);

          if (args.Header.Key == CONST_SEQ_NAME) return;   //需要不进行处理

          var reResult = new Regex($@"^-?\d*\.?\d+(?:[eE][-+]?\d+)?$");

          if (args.DataRow[args.Header.Key] != DBNull.Value)

          {

              var strInput = args.DataRow[args.Header.Key].ToString();

              var actionResult = reResult.Match(strInput);

             

            if (actionResult.Success)

                {

                    var format_digits = 2;

                    var val_data = Convert.ToDecimal(args.DataRow[args.Header.Key]);

                    var where_01 = args.CellType == BOS.Core.Enums.BOSEnums.Enu_ReportCellType.Total && args.IsSummaryRow && args.Value.ToString().IndexOf('.') == -1; //合计列的整型处理

                    var where_02 = args.CellType == BOS.Core.Enums.BOSEnums.Enu_ReportCellType.Normal && !args.IsSummaryRow && args.Value is int; //标准默认数值列整型处理

                    if (where_01 || where_02)

                    {

                        format_digits = 0; 

                    }

                    args.FormateValue = GetDecimalFormatString(val_data, format_digits);

                }

          }

      }


      /// <summary>

      /// 格式化数字

      /// </summary>

      /// <param name="value">格式化的数值</param>

      /// <param name="digits">小数点位</param>

      /// <returns></returns>

      protected string GetDecimalFormatString(decimal value, int format_digits = 0)

      {

          if (format_digits < 0 || format_digits > 99)

              return ObjectUtils.Object2String(value);

          var format = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();

          format.NumberNegativePattern = 1;

          format.NumberDecimalDigits = format_digits;

          return value.ToString($"N{format_digits}", format);

      }

  }

如果有新手小虾米不知道如何挂表单插件的话,请在社区搜索简单账表二开,有详细的指导步骤。

        

图标赞 4
4人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!