Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查我的SSRS报告是否为';代码为空_C#_Web Services_Ssrs 2008_Reportviewer2008 - Fatal编程技术网

C# 检查我的SSRS报告是否为';代码为空

C# 检查我的SSRS报告是否为';代码为空,c#,web-services,ssrs-2008,reportviewer2008,C#,Web Services,Ssrs 2008,Reportviewer2008,我正在按代码(C#)加载我使用SSRS完成的报告,但我需要检查报告是否为空 我怎么能得到那个?!! 我使用的代码是: if (!string.IsNullOrEmpty(RptInstance.FileName)) { string ReportName = RptInstance.FileName.Replace(".rpt", ""); reportViewer.ServerReport.ReportPa

我正在按代码(C#)加载我使用SSRS完成的报告,但我需要检查报告是否为空

我怎么能得到那个?!! 我使用的代码是:

if (!string.IsNullOrEmpty(RptInstance.FileName))
            {
                string ReportName = RptInstance.FileName.Replace(".rpt", "");
                reportViewer.ServerReport.ReportPath = string.Format("{0}{1}", Settings.Default.ReportPath, ReportName);
                reportViewer.ServerReport.SetParameters(paramList);
                reportViewer.ServerReport.Timeout = Timeout;

                string mimeType, encoding, extension, deviceInfo;
                string[] streamIds = null;
                Warning[] warnings = null;
                deviceInfo = "<DeviceInfo><SimplePageHeaders>True</SimplePageHeaders></DeviceInfo>";

                byte[] bytes = reportViewer.ServerReport.Render(RptInstance.PDF ? "PDF" : "Excel", deviceInfo, out mimeType, out encoding, out extension, out streamIds, out warnings);
                RptInstance.State = true;
                //SaveData(Report.FileName, bytes, string.Format(@"C:\temp\{0}.{1}", ReportName, isPdf ? "pdf" : "xlsx"));

                SaveData(string.Format("{0}_{1}.{2}", ReportName, Guid.NewGuid(), RptInstance.PDF ? "pdf" : "xlsx"), bytes, DirectoryName);
            }
if(!string.IsNullOrEmpty(RptInstance.FileName))
{
字符串ReportName=RptInstance.FileName.Replace(“.rpt”,”);
reportViewer.ServerReport.ReportPath=string.Format(“{0}{1}”,Settings.Default.ReportPath,ReportName);
reportViewer.ServerReport.SetParameters(paramList);
reportViewer.ServerReport.Timeout=超时;
字符串mimeType,编码,扩展名,deviceInfo;
字符串[]streamIds=null;
警告[]警告=null;
deviceInfo=“True”;
byte[]bytes=reportViewer.ServerReport.Render(RptInstance.PDF?“PDF”:“Excel”、deviceInfo、输出mimeType、输出编码、输出扩展名、输出StreamID、输出警告);
RptInstance.State=true;
//SaveData(Report.FileName,bytes,string.Format(@“C:\temp\{0}.{1}”,ReportName,isPdf?”pdf:“xlsx”);
SaveData(string.Format(“{0}{1}.{2}”、报告名、Guid.NewGuid()、rptance.PDF?“PDF”:“xlsx”)、字节、目录名);
}

提前感谢

数据集是报表的内部数据集。没有外部API来查找给定报表参数的特定数据集返回的记录数

有两种方法可以解决此问题:

一,。使用
LocalReport

用C代码创建数据集,检查它是否有行,然后将其作为数据源提供给SSRS

ReportDataSource ds = new ReportDataSource(dsName, data);
ReportGenerator gen = new ReportGenerator(data, dsName);
reportViewer.Reset();
reportViewer.LocalReport.DataSources.Add(ds);
reportViewer.LocalReport.DisplayName = displayName;
reportViewer.LocalReport.LoadReportDefinition(gen.GeneraReport());
参考:


二,。以CSV格式下载您的报告。这将为您的参数集提供每个数据源的原始数据。在这里您可以检查返回的行数。

这是我的忍者方法

将“每个控件隐藏”属性设置为一个表达式,该表达式在数据集没有记录时隐藏控件:

=Rownumber("TransactionsByAccountAndEffDate") = 0
在报告中,我还插入一个文本框并设置其隐藏属性,以便在报告没有数据时让人们知道:

然后,当我生成没有数据的报告时,所有控件都将隐藏,这使得文件的大小很小:

在代码中创建报告后,我只需检查文件大小,看看它是否很小:

var length = new System.IO.FileInfo(path).Length;

你说报告是空的是什么意思?您的意思是,对于您传递的参数,您的数据集没有记录吗?@nunespascal正是我的意思使用第二种解决方案,将报告下载为CSV,我如何知道每个数据源的原始数据?!!,为了检查行数?!!提前感谢将您的报告保存为CSV,并查看,对于每个数据源,它将写出数据。计算CSV文件中的行数应该很简单。
var length = new System.IO.FileInfo(path).Length;