繁体   English   中英

有什么办法可以问一个ReportViewer,一个Report内的查询结果是否会产生超过65k的行?

[英]Is there any way to ask a ReportViewer if the result of the query inside a Report will yield more than 65k rows?

我的报表位于Reporting Services服务器中,在.rdl内有一个接受参数的查询。 我将这些参数与ReportViewer实例一起传递。 我有一种方法,可以直接使用Excel格式下载报告的结果,而无需直接使用ReportViewer。 方法如下:

private void CreateEXCEL(Dictionary<string, string> parametros, string nombreReporte)
{
    // Variables
    Warning[] warnings;
    string[] streamIds;
    string mimeType = string.Empty;
    string encoding = string.Empty;
    string extension = string.Empty;

    // Setup the report viewer object and get the array of bytes
    string ReportServerURL = ConfigurationManager.AppSettings["ReportServerCompletitudURL"];
    string ReportName = ConfigurationManager.AppSettings["ReportNameRankingVentaPDV"] + "/" + nombreReporte;

    MyReportViewer.Reset();

    MyReportViewer.ProcessingMode = ProcessingMode.Remote;
    MyReportViewer.ServerReport.ReportPath = ReportName;
    MyReportViewer.ServerReport.ReportServerUrl = new Uri(ReportServerURL);

    List<ReportParameter> parameters = new List<ReportParameter>();

    foreach (var d in parametros)
    {
        parameters.Add(new ReportParameter(d.Key, d.Value));
    }

    MyReportViewer.ServerReport.SetParameters(parameters);

    byte[] bytes = MyReportViewer.ServerReport.Render("EXCEL", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

    // Now that you have all the bytes representing the PDF report, buffer it and send it to the client.
    Response.Buffer = true;
    Response.Clear();
    Response.ContentType = mimeType;
    Response.AddHeader("content-disposition", "attachment; filename=" + nombreReporte + "." + extension);
    Response.BinaryWrite(bytes); // create the file
    Response.Flush(); // send it to the client to download

}

现在的想法是,我不能创建一个包含65536行以上的文件作为Excel文件,如果不是Report内的查询结果将产生65k行以上,则要“询问”,然后使用csv格式。 我看不到reportviewer服务器控件具有检查查询结果的方法。 我不想在SSRS报告中使用分页符。 有什么办法可以在我的代码后面询问吗?

不知道这是否有帮助,但这可以解决导出到excel的问题。

在tablix(或表或列表)上创建一个父组,然后在Group on:字段中输入以下表达式。

在组的每个实例之间添加分页符

=CInt(Ceiling(RowNumber(nothing)/65000))

请参阅此处的问题。

我找到了解决此特定问题的方法,如下所示:

将此表达式放在我的“详细信息”组中。 在Disabled属性中: =IIF(rownumber(nothing) mod 10000=0,false,true) BreakLocation: End 进行此更改后,我可以每隔1万行将保存在同一工作表中的excel保存在不同的工作表中。 我尝试做上限,但是如果您在该组中有一个行号表达式,它将无法正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM