2011-09-19 143 views
0

我正在開發Web應用程序還沒有指定,在我的應用我有打印不RDLC代碼preview.my是繼的報告「」報告定義

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); 
+0

請看看[我在我的RDLC報告中沒有指定「報告的報告定義」xxxx.rdlc'(http://stackoverflow.com/questions/8505700/im-getting-the-report-definition-for-report-xxxx -rdlc-已經 - 不被指定/ 34435136#34435136)。 –

回答

3

我只是碰到了這個問題,同時實例要導出報表,不得不設置該屬性類似這樣的報告「」:

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

我看到的區別是.LocalReport是設置嵌入式資源的子屬性。

+0

爲了澄清,**嵌入資源名稱將以其嵌入**中的程序集的名稱空間作爲前綴。在我的情況中,對於我的業務程序集中名爲Report1.rdlc的嵌入式資源,我需要'localReport.ReportEmbeddedResource =「Business.Report1.rdlc」;'感謝您指引我朝着正確的方向發展! – madannes

+0

爲** asp.net網站檢查** [此](http://stackoverflow.com/a/37321117/2218697)回答。希望有所幫助。 – stom

1

From MSDN:

嵌入式報表資源是報表定義已存儲在調用程序集的資源 。

如果ReportPath屬性已設置,則ReportEmbeddedResource 屬性將被忽略。

因此,設置EmbeddedResource屬性實際上什麼都不做,您的ReportPath也失敗,因爲它期望物理文件系統路徑。

1

我有同樣的問題。我通過設置「複製到輸出目錄=複製,如果更新」來解決它。乾杯。

0

我也有同樣的問題,這意味着你的代碼沒有找到rdlc文件,你需要使用report.ReportEmbeddedResourcereport.ReportPath。看你的代碼在我看來,你只需要使用report.ReportEmbeddedResource,另一種選擇是爲位於您的電腦或網絡文件系統中的特定位置的rdlc