【问题标题】:The report definition for report ' ' has not been specified尚未指定报告 ' ' 的报告定义
【发布时间】:2011-09-19 11:35:07
【问题描述】:

我正在开发 Web 应用程序,在我的应用程序中我必须在没有预览的情况下打印 rdlc。我的代码如下

    LocalReport report = new LocalReport();
    report.ReportEmbeddedResource = "TCESS.ESales.CommonLayer.Reports.HandlingBillReport.rdlc";
    report.ReportPath="TCESS.ESales.CommonLayer.Reports.HandlingBillReport.rdlc";

    SettlementOfAccountsDTO objSettlementOfAccountsDTO = ESalesUnityContainer.Container.Resolve<ISettlementOfAccountsService>().GetSettlementOfAccountsByAccId(32);
    if (objSettlementOfAccountsDTO.Account_Id > 0)
    {
        SetReportParametersForBill(objSettlementOfAccountsDTO, AccountReportViewer, report);
    }

    Export(report);
    m_currentPageIndex = 0;
    Print();


private Stream CreateStream(string name, string fileNameExtension, Encoding encoding,
                        string mimeType, bool willSeek)
{
    Stream stream = new FileStream(name + "." + fileNameExtension, FileMode.Create);
    m_streams.Add(stream);
    return stream;
}

private void Export(LocalReport report)
{
    string deviceInfo =
      "<DeviceInfo>" +
      "  <OutputFormat>EMF</OutputFormat>" +
      "  <PageWidth>8.5in</PageWidth>" +
      "  <PageHeight>11in</PageHeight>" +
      "  <MarginTop>0.25in</MarginTop>" +
      "  <MarginLeft>0.25in</MarginLeft>" +
      "  <MarginRight>0.25in</MarginRight>" +
      "  <MarginBottom>0.25in</MarginBottom>" +
      "</DeviceInfo>";
    Warning[] warnings;
    m_streams = new List<Stream>();

    report.Render("Image", deviceInfo, CreateStream, out warnings);

    foreach (Stream stream in m_streams)
        stream.Position = 0;
}

private void PrintPage(object sender, PrintPageEventArgs ev)
{
    Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);

    ev.Graphics.DrawImage(pageImage, 0, 0);

    m_currentPageIndex++;
    ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}

private void Print()
{
    const string printerName = "\\\\193.168.0.20\\Printer_Q3";

    if (m_streams == null || m_streams.Count == 0)
        return;

    PrintDocument printDoc = new PrintDocument();
    printDoc.PrinterSettings.PrinterName = printerName;
    if (!printDoc.PrinterSettings.IsValid)
    {
        string msg = String.Format("Can't find printer \"{0}\".", printerName);
        Console.WriteLine(msg);
        return;
    }

    int i=0;
    foreach (Stream stream in m_streams)
    {
        Metafile pageImage = new Metafile(stream);
        pageImage.Save(Server.MapPath("~/Images/"+i.ToString()+".jpg"));
        i++;
    }    
    //printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
    //printDoc.Print();
}

我收到错误“尚未指定报告''的报告定义” 上线

report.Render("Image", deviceInfo, CreateStream, out warnings);

【问题讨论】:

标签: c# asp.net


【解决方案1】:

我在实例化要导出的报告时遇到了这个问题,我不得不像这样设置这个属性:

wrvReport.LocalReport.ReportEmbeddedResource = "CommonLayer.Reports.SalesByPrice.rdlc";

我看到的区别是.LocalReport 是设置嵌入资源的子属性。

【讨论】:

  • 为了澄清,嵌入的资源名称将以其嵌入的程序集的命名空间为前缀。就我而言,对于我的业务程序集中名为 Report1.rdlc 的嵌入式资源,我需要 localReport.ReportEmbeddedResource = "Business.Report1.rdlc"; 感谢您为我指明正确的方向!
  • 用于 asp.net 网站检查 this 回答。希望对您有所帮助。
【解决方案2】:

From MSDN:

嵌入式报表资源是已被 作为资源存储在调用程序集中。

如果已设置 ReportPath 属性,则 ReportEmbeddedResource 属性被忽略。

因此,设置 EmbeddedResource 属性实际上什么都不做,而且您的 ReportPath 也失败了,因为它需要一个物理文件系统路径。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。我通过设置“复制到输出目录=如果更新则复制”解决了这个问题。干杯。

    【讨论】:

      【解决方案4】:

      我也遇到了同样的问题,这意味着你的代码没有找到 rdlc 文件,你需要使用report.ReportEmbeddedResourcereport.ReportPath。查看您的代码在我看来您只需要使用report.ReportEmbeddedResource,另一种选择是用于位于您的电脑或网络文件系统中特定位置的rdlc

      【讨论】:

        猜你喜欢
        • 2021-09-14
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多