万能报表预览显示乱码原创
金蝶云社区-eris
eris
4人赞赏了该文章 1,389次浏览 未经作者许可,禁止转载编辑于2021年06月19日 11:32:51

富文本和富文本编辑字段在使用万能报表做模板套打预览时显示乱码,是因为富文本和富文本编辑字段内容在数据库是使用字节码存储的,故需要在显示之前需要转换为字符串。

  1. 万能报表上注册表单插件:

    image.png

2. 插件代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.WNReport.PlugIn;
using Kingdee.BOS.ServiceHelper;
namespace BOSTestPlugIn
{
    [Description("富文本内容格式转换插件")]
[HotUpdate]
    public  class ConvertRichTextPlugIn : AbstractWNReportPlugIn
    {
        public override void OnPrepareDevPrintData(PreparePrintDevDataEventArgs e)
        { 
               //假设富文本和富文本编辑字段都在单据头中,假设它们的列名分别为FRichText1,FRichTextEdit1
           base.OnPrepareDevPrintData(e);
           var headEntity = this.View.BusinessInfo.GetEntity("FBillHeader");   
                //得到单据头表
           DataTable dt = e.DataSource.Tables[headEntity.TableName];
              //创建动态列加到表中,列名不能跟表中相同 
           //富文本    
           DataColumn richTextColumn = new DataColumn();
           richTextColumn.DataType = System.Type.GetType("System.String");
           richTextColumn.ColumnName = "F_RichText1";
   dt.Columns.Add(richTextColumn);
           //富文本编辑        
           DataColumn richTextEditColumn = new DataColumn();
           richTextEditColumn.DataType = System.Type.GetType("System.String");
           richTextEditColumn.ColumnName = "F_RichTextEdit1";
           dt.Columns.Add(richTextEditColumn);
           for (int i = 0; i < dt.Rows.Count; i++)
           {
                              //富文本编辑字段需要从数据库中取内容,表中只有标题
                    string sql = string.Format("select FRichTextEdit1_Tag   from table  where fentryid={0};", dtEntity.Rows[i][0]);
                    DataSet ds = DBServiceHelper.ExecuteDataSet(this.Context, sql);      
                    DataRow dr = ds.Tables[0].Rows[0];
                    byte[] richTextEditValue =dr.IsNull("FRichTextEdit1_Tag") ?null: (byte[])dr["FRichTextEdit1_Tag"];
                    byte[] richTextValue = dr.IsNull("FRichText1") ? null : (byte[])dr["FRichText1"];
                    if (!richTextEditValue.IsNullOrEmpty())
                    {
                        dtEntity.Rows[i]["F_RichTextEdit1"] = Encoding.UTF8.GetString(richTextEditValue);
                    }
                    if (!richTextValue.IsNullOrEmpty())
                    {
                        dtEntity.Rows[i]["F_RichText1"] = Encoding.UTF8.GetString(richTextValue);
                    }
           }
           //删除原来的列,并把新创建的列名改成原来的列名
           dtEntity.Columns.Remove("FRichText1");
           richTextColumn.ColumnName = "FRichText1";
           dtEntity.Columns.Remove("FRichTextEdit1");
           richTextEditColumn.ColumnName = "FRichTextEdit1";
        }
    }
}



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