FastReport 主子表关系

代码中只需要绑定主表的数据就可以,子表的数据会通过报表中的关连关系自动到数据库中带出。

复制代码
using CloudSaaS.DB.Handler;
using CloudSaaS.Model;
using CloudSaaS.DAL;
using FastReport;
using FastReport.Web;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace FastWeb.Modules.DevelopManages.FBDesigners.Forms.FormHandler
{
    public partial class FormPrint : System.Web.UI.Page
    {
        protected Button ButtonPDF;
        private int tid;
        private string flowGuid;
        private string ReportName;
        protected void Page_Load(object sender, EventArgs e)
        {
            string value = base.Request["tid"];
            this.flowGuid = base.Request["flowGuid"];
            this.ReportName = base.Request["ReportName"];
            this.tid = (string.IsNullOrEmpty(value) ? 0 : Convert.ToInt32(value));
            this.ReportName = (string.IsNullOrEmpty(this.ReportName) ? "Demo" : base.Server.UrlDecode(this.ReportName));
            this.WebReport1.Prepare();
        }

        protected void WebReport1_StartReport(object sender, EventArgs e)
        {
            Report report = (sender as WebReport).Report;
            string value = HttpContext.Current.Request.Cookies["tenantID"].Value;
            string text = this.GetReportPath() + this.ReportName + ".frx";
            report.Load(text);
            this.GetTBData(report, this.flowGuid, this.tid, value);
        }

		private void GetTBData(Report FReport, string flowGuid, int tid, string tenantId)
		{
			dalSYSBPMDTABLE dalSYSBPMDTABLE = new dalSYSBPMDTABLE(tenantId);
			List<SYSBPMDTABLEInfo> list = dalSYSBPMDTABLE.GetLists().FindAll((SYSBPMDTABLEInfo c) => c.CatalogGuid == flowGuid);
			foreach (SYSBPMDTABLEInfo current in list)
			{
				string tableName = current.TableName.ToString().Trim();
				DataSet dataSetByTaskId = this.GetDataSetByTaskId(tableName, tid, tenantId);
				FReport.RegisterData(dataSetByTaskId);
			}
			DataSet dataSetByTaskIdPross = this.GetDataSetByTaskIdPross(tid, tenantId);
			FReport.RegisterData(dataSetByTaskIdPross);
		}
		private string GetReportPath()
		{
			string path = "../../../../../CloudSpaces/";
			string text = this.Page.Server.MapPath(path);
			string str = "\\";
			text = text + "Reports" + str;
			if (!Directory.Exists(text))
			{
				Directory.CreateDirectory(text);
			}
			return text;
		}
		private DataSet GetDataSetByTaskId(string tableName, int taskId, string tenantId)
		{
			DataSet dataSet = null;
			if (taskId > 0)
			{
				StringBuilder stringBuilder = new StringBuilder(" DECLARE @sql VARCHAR(1000) ");
				stringBuilder.AppendFormat("IF NOT EXISTS (SELECT a.name FROM syscolumns a,sysobjects b WHERE a.id=b.id AND LTRIM(a.name)='GridOrder' AND LTRIM(b.name)='{0}') BEGIN", tableName);
				stringBuilder.AppendFormat(" SET @sql='select * from {0} with(nolock) where TaskId=''{1}'''", tableName, taskId);
				stringBuilder.Append(" END");
				stringBuilder.Append(" Else BEGIN");
				stringBuilder.AppendFormat("  SET @sql='select * from {0} with(nolock) where TaskId=''{1}''  order by GridOrder'", tableName, taskId);
				stringBuilder.Append(" END");
				stringBuilder.Append(" exec(@sql)");
				dataSet = CloudDB.GetHandler(tenantId).Query(stringBuilder.ToString());
				if (dataSet.Tables.Count > 0)
				{
					dataSet.Tables[0].TableName = tableName;
				}
			}
			return dataSet;
		}
		private DataSet GetDataSetByTaskIdPross(int taskId, string tenantId)
		{
			DataSet dataSet = null;
			if (taskId > 0)
			{
				StringBuilder stringBuilder = new StringBuilder();
				stringBuilder.AppendFormat(" SELECT NodeName,OwnerDept,uid=IDENTITY(int,1,1) into #Approvetep  FROM SYSBPMISteps with(nolock)  \r\n               where  TaskId={0} order by TaskId,StepId\r\n   \r\n             select top 0 convert(nvarchar(50),null) A1, convert(nvarchar(50),null) A2,\r\n             convert(nvarchar(50),null) A3, convert(nvarchar(50),null) A4,\r\n             convert(nvarchar(50),null) A5, convert(nvarchar(50),null) A6,\r\n             convert(nvarchar(50),null) A7, convert(nvarchar(50),null) A8 into #ApproveTable\r\n \r\n             declare @icount int ,@i int,@jcount int ,@j int\r\n             declare @NodeName nvarchar(50),@OwnerName nvarchar(50),@A5 nvarchar(50),@A6 nvarchar(50),@A7 nvarchar(50),@A8 nvarchar(50)\r\n             declare @A1 nvarchar(50),@A2 nvarchar(50),@A3 nvarchar(50),@A4 nvarchar(50)\r\n             set @icount=(select count(1) from #Approvetep)    \r\n             set @i=1 \r\n             while @i<=@icount    \r\n              begin\r\n               select @NodeName=NodeName,@OwnerName=OwnerDept from  #Approvetep where uid=@i \r\n               if @i%4=1 begin  select @A1=@NodeName,@A2=@OwnerName  end\r\n               if @i%4=2 begin  select @A3=@NodeName,@A4=@OwnerName  end\r\n               if @i%4=3 begin  select @A5=@NodeName,@A6=@OwnerName  end\r\n               if @i%4=0 \r\n                 begin  \r\n                   select @A7=@NodeName,@A8=@OwnerName  \r\n                   insert #ApproveTable select @A1,@A2,@A3,@A4,@A5,@A6,@A7,@A8\r\n                   select @A1='',@A2='',@A3='',@A4='',@A5='',@A6='',@A7='',@A8=''\r\n                 end\r\n               if (@i%4<>0 and @i=@icount)\r\n                   insert #ApproveTable select @A1,@A2,@A3,@A4,@A5,@A6,@A7,@A8    \r\n               set @i=@i+1  \r\n              end\r\n\r\n             select * from #ApproveTable \r\n             drop table  #ApproveTable,#Approvetep", taskId);
				dataSet = CloudDB.GetHandler(tenantId).Query(stringBuilder.ToString());
				if (dataSet.Tables.Count > 0)
				{
					dataSet.Tables[0].TableName = "ApproveTable";
				}
			}
			return dataSet;
		}
	}
}
相关推荐
Fighting_p3 小时前
【预览word文档】使用插件 docx-preview 预览线上 word 文档
开发语言·c#·word
jiushidt6 小时前
Things About ArcGISPro
arcgis·c#·.net·arcgispro
雪雁6 小时前
CodeSpirit 多语言国际化使用指南(Beta)
c#·asp.net·.net 10·codespirit
自己的九又四分之三站台6 小时前
写一个简单的DebugView
c#
CreasyChan6 小时前
C#中单个下划线的语法与用途详解
前端·c#
m5655bj7 小时前
如何通过 C# 实现 PDF 页面裁剪
前端·pdf·c#
STARBLOCKSHADOW7 小时前
【C#】VS中打包C#桌面软件为exe文件
c#·vs·打包·桌面程序
步步为营DotNet7 小时前
深度解析C# 11 的Required成员:编译期验证逻辑与稳健编程实践
java·服务器·c#
唐青枫8 小时前
深入理解 C#.NET Parallel:并行编程的正确打开方式
c#·.net
钰fly14 小时前
C#类型转换 显隐转换
c#