找回密码
 立即注册

QQ登录

只需一步,快速开始

KearneyKang 讲师达人认证 悬赏达人认证

超级版主

199

主题

6505

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
10816

圣诞拼拼乐微信认证勋章讲师达人悬赏达人元老葡萄

KearneyKang 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2023-8-7 16:46  /   查看:1737  /  回复:0
本帖最后由 KearneyKang 于 2023-9-6 15:12 编辑

在线设计器是基于MVC 项目开发的,默认的是将报表保存到服务器的文件夹上面。但往往有很多应用场景是需要将报表保存到数据库后期报表加载预览的时候从数据库中读取报表文件内容并且预览。
下面给详细讲解如何把报表文件通过 Xml 的形式自定义保存在Sqllite数据库中
1、首先如果要自定义报表的保存,那么就需要修改 Startup.cs 的 UseCustomStore 的方法
通过 SQLExpressResourcesService()方法进行保存自定义
  1. var resourcesService = new SQLExpressResourcesService();
  2.                         app.UseDesigner(config => {
  3.                                 config.UseCustomStore(resourcesService);
  4.                         });               
复制代码
SQLExpressResourcesService实现部分代码
自定义保存
  1. public string SaveReport(string name, Report report, bool isTemporary)
  2.         {
  3.            if (!isTemporary)
  4.             {              
  5.                 using (var conn = new SQLiteConnection(connString))
  6.                 {
  7.                     conn.Open();
  8.                     var reportXml = ReportConverter.ToXml(report);
  9.                     string id = name.Substring(0, name.IndexOf(".rdlx"));
  10.                     string sql = @"INSERT INTO reportInfo (Id, Name, Type, reportXml)
  11.                    VALUES (@id, @name, @type, @reportXml)"; // 替换为你的表名
  12.                     SQLiteCommand cmd = new SQLiteCommand(sql, conn);
  13.                     cmd.Parameters.AddWithValue("@id", id); // 替换为实际的Id值
  14.                     cmd.Parameters.AddWithValue("@name", name); // 替换为实际的Name值
  15.                     cmd.Parameters.AddWithValue("@type", "RDL"); // 替换为实际的Type值
  16.                     cmd.Parameters.AddWithValue("@reportXml", reportXml); // 替换为实际的reportXml值
  17.                     cmd.ExecuteNonQuery();
  18.                 }
  19.                 return name;
  20.             }
  21.             else
  22.             {               
  23.                 var reportXml = ReportConverter.ToXml(report);
  24.                 byte[] xmlBytes = reportXml;
  25.                 string currentDir = AppDomain.CurrentDomain.BaseDirectory;
  26.                 // 指定报表文件的缓存路径
  27.                 string cachePath = currentDir + @"resources\report.rdlx";            
  28.                 try
  29.                 {
  30.                     // 将报表数据写入文件
  31.                     File.WriteAllBytes(cachePath, reportXml);
  32.                     Console.WriteLine("报表文件已成功缓存到路径:" + cachePath);
  33.                 }
  34.                 catch (Exception ex)
  35.                 {
  36.                     Console.WriteLine("报表文件缓存失败:" + ex.Message);
  37.                     return null;
  38.                 }
  39.                 return cachePath;
  40.             }                 
  41.           }
复制代码
自定义读取报表
  1.   public Report GetReport(string id)
  2.         {
  3.             GrapeCity.ActiveReports.PageReportModel.Report rpt = null;
  4.             using (var conn = new SQLiteConnection(connString))
  5.             {
  6.                 conn.Open();
  7.                 using (var cmd = conn.CreateCommand())
  8.                 {
  9.                     cmd.CommandText =
  10.                     "SELECT id, reportXml FROM reportInfo WHERE id = @id";
  11.                     cmd.Parameters.AddWithValue("@id", id);
  12.                     using (var reader = cmd.ExecuteReader())
  13.                     {
  14.                         while (reader.Read())
  15.                         {
  16.                             using (var readStream = reader.GetStream(1))
  17.                             using (var outputStream = new MemoryStream())
  18.                             {
  19.                                 readStream.CopyTo(outputStream);
  20.                                 rpt= ReportConverter.FromXML(outputStream.ToArray());
  21.                             }
  22.                         }
  23.                     }

  24.                 }
  25.             }
  26.             return rpt;
  27.         }
复制代码
报表自定义预览
  1. app.UseReporting(settings =>
  2.                         {
  3.                                 settings.UseCompression = true;
  4.                                 settings.UseCustomStore(report =>
  5.                                 {
  6.                                         PageReport rep = new PageReport();
  7.                                         //string path = System.Web.Hosting.HostingEnvironment.MapPath("~/");                                       
  8.                                         rep.Load(new FileInfo(HttpUtility.UrlDecode(report)));                                
  9.                                         return rep.Report;
  10.                                 });
  11.                         });
复制代码
最终自定义保存demo下载

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部