Как экспортировать DataGridView в ReportViewer? - PullRequest
2 голосов
/ 13 июня 2011

Я работаю над проектом C #, в рамках которого я генерирую отчеты из базы данных и затем отображаю их в DataGridView, поскольку проще динамически добавлять строки и столбцы.Но теперь мне нужно экспортировать содержимое DataGridView в ReportViewer на лету для печати.Я не хочу показывать ReportViewer.Я просто хочу создать его экземпляр и заполнить его из моего DatagridView, а затем немедленно отобразить диалоговое окно «Печать», чтобы получить высококачественный и хорошо организованный макет в выходных данных.В настоящее время я печатаю отчеты, преобразовывая их в HTML, а затем назначаю их элементу управления WebBrowser и вызываю метод ShowPrintDialog ().Но таким образом я не могу контролировать некоторые проблемы печати, такие как печать заголовков столбцов на всех страницах, так как WebBrowser выводит таблицу последовательно..

Любая идея высоко ценится.

1 Ответ

0 голосов
/ 01 августа 2014

Вы должны использовать Microsoft Report Viewer 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)
            {

            }
            }
...