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;
		}
	}
}
相关推荐
刘欣的博客2 小时前
C# CS架构程序发版升级的走数据库方案
c#·单文件升级自己的方式
Yorlen_Zhang4 小时前
Python Tkinter Text 控件完全指南:从基础编辑器到富文本应用
开发语言·python·c#
不绝1914 小时前
C#进阶:预处理指令/反射,Gettype,Typeof/关键类
开发语言·c#
大鹏说大话4 小时前
告别 MSBuild 脚本混乱:用 C# 和 Nuke 构建清晰、可维护的现代化构建系统
开发语言·c#
czhc11400756635 小时前
通信 28
c#
bugcome_com9 小时前
C# 程序结构详解:从 Hello World 开始
c#
唐梓航-求职中10 小时前
编程-技术-算法-leetcode-288. 单词的唯一缩写
算法·leetcode·c#
bugcome_com12 小时前
阿里云 OSS C# SDK 使用实践与参数详解
阿里云·c#
懒人咖1 天前
缺料分析时携带用料清单的二开字段
c#·金蝶云星空
bugcome_com1 天前
深入了解 C# 编程环境及其开发工具
c#