2011-06-13 74 views
2

我正在處理一個C#項目,在該項目中,我從數據庫生成報告,然後在DataGridView中顯示,因爲動態添加行和列更簡單。但是我現在需要將DataGridView內容導出到ReportViewer中以便進行打印。我不想顯示ReportViewer。我只想創建它的實例並從我的DatagridView中填充,然後立即顯示Print Dialog,以便在輸出中獲得高質量和組織良好的佈局。目前,我通過將報告轉換爲HTML來打印報告,然後將其分配給WebBrowser控件並調用ShowPrintDialog()方法。但通過這種方式,我無法控制一些打印問題,例如在WebBrowser按順序輸出表格時在所有頁面中打印列標題。如何將DataGridView導出到ReportViewer?

我需要在最短的時間內達到這個目標,因爲這是一個生產項目。

任何想法是高度讚賞。

回答

0

,您應該使用微軟報表查看器 http://www.microsoft.com/en-us/download/details.aspx?id=3841 添加到項目中的dll:Microsoft.ReportViewer.Common和Microsoft.ReportViewer.WinForms所以你必須創建這樣的* .rdlc文件可以更改的設計你的報告。最後爲了節省,你可以這樣做:

public static void PrintArticles(ICollectionView Articles) 
     { 

      try 
      { 
       var articlesRows = new DataTable("Articles"); 
       articlesRows.Columns.Add("Id"); 
       articlesRows.Columns.Add("Description"); 

       var arts = Articles.Cast<Article>(); 

       foreach (var art in arts) 
       { 
        articlesRows.Rows.Add(art.Id, art.Description); 
       } 

       ReportViewer reporter = new ReportViewer(); 
       reporter.LocalReport.DisplayName = "Report1"; 
       reporter.LocalReport.ReportPath = Path.Combine(Program.BasePath + "PrintArticles.rdlc"); 
       reporter.LocalReport.DataSources.Clear(); 
       reporter.LocalReport.DataSources.Add(new ReportDataSource("Project1", articlesRows)); 

       byte[] report = reporter.LocalReport.Render("PDF"); 

       reporter.LocalReport.ReleaseSandboxAppDomain(); 

       string pdfpath = Path.Combine(Program.BasePath, "file.pdf"); 

       if (File.Exists(pdfpath)) 
        File.Delete(Path.Combine(Program.BasePath, "file.pdf")); 

       FileStream writer = new FileStream(pdfpath, FileMode.Create); 
       writer.Write(report, 0, report.Length); 
       writer.Close(); 

       Process ar = Process.Start(pdfpath); 
      } 
      catch (Exception e) 
      { 

      } 
      }