Запуск функций панели инструментов ReportViewer в C # WinForms - PullRequest
0 голосов
/ 16 февраля 2012

Можно ли запустить экспорт в Excel / PDF / Word, нажав кнопку (или любой другой элемент управления, кроме элемента, предоставленного reportViewer). Мне удалось запустить Print и PrintLayout, выполнив PerformClick, но он не работает с экспортом (это 15-й индекс в ReportViewers ToolBar, но когда я пытаюсь сделать то же самое с Export, ничего не происходит). Это потому, что Export является DropDownButton? В таком случае, как мне получить доступ к его элементам (я перечислял каждый элемент в панели инструментов по имени и порядковому номеру, в списке указывался Export DropDownButton, а его элементов нет).

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Чтобы получить доступ к панели инструментов, вам нужна функция FindToolbar, подобная той, которую вы опубликовали в вопросе.Это версия этой функции на C #:

private T FindToolStrip<T>(Control control) where T : System.Windows.Forms.Control
    {
        if (control == null)
        {
            return null;
        }
        else if (control is T)
        {
            return (T)control;
        }
        else
        {
            T result = null;

            foreach (Control embedded in control.Controls)
            {
                if (result == null)
                {
                    result = FindToolStrip<T>(embedded);
                }
            }

            return result;
        }
    }

После этого вы создаете элемент управления кнопки (или любой другой, который вам нужен) и добавляете в него следующий код:

            ToolStrip ts = new ToolStrip();
            ts = FindToolStrip<ToolStrip>(this.reportViewer1);
            ts.Items[13].PerformClick();

Item 13это предварительный просмотр печати, вы можете получить индексы всех кнопок в ReportViewers ToolStrip, выполнив циклический цикл и выписав имена элементов (всего их 21, но некоторые из них являются разделителями или метками).Вы можете использовать этот код для запуска любого из них (кроме «Экспорта», я думаю, что это связано с тем, что «Экспорт» - это выпадающая кнопка, а не обычная).Если вам интересно, это код, который экспортирует отображаемый отчет в файл .xls:

            Warning[] warnings;
            string[] streamids;
            string mimeType;
            string encoding;
            string extension;
            string path = " ";
            DialogResult dr= saveFileDialog1.ShowDialog();
            path = saveFileDialog1.FileName;              

            byte[] bytes = reportViewer1.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamids, out warnings);

            FileStream fs = new FileStream(path + ".xls", FileMode.Create);
            fs.Write(bytes, 0, bytes.Length);
            fs.Close();

Опять же, вы можете поместить его в метод button_Click или что-то подобное.Я не пробовал его с другими расширениями (.pdf или .doc), но я думаю, что он должен работать просто отлично.Вам нужно добавить расширение файла, который вы пытаетесь сохранить, в строку пути, иначе вы не сможете открыть созданный файл.Я надеюсь, что это поможет вам решить вашу проблему.

0 голосов
/ 17 февраля 2012

У меня был тот же вопрос. Не могли бы вы опубликовать часть своего кода, чтобы я мог видеть, как получить доступ к панели инструментов и кнопкам Print и Print Preview? Может быть, посмотрев на это, я смогу выяснить и другие.

Принятое решение для следующего поста может вам помочь, если вы сможете конвертировать из VB.NET

Программный запуск элементов управления панели инструментов ReportViewer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...