Программно установить заголовок для формы просмотра в XtraReport

Кто-нибудь знает, как установить заголовок для просмотра формы при отображении документа XtraReport? Сценарий следующий:

У меня настроен отчет XtraReport, я показываю его вызовом метода ShowPreviewDialog, открывается форма просмотра и показывает документ. Мне нужно установить заголовок для этой формы просмотра, и я не могу найти свойство или способ сделать это.

Заранее спасибо.


person Sebastian    schedule 09.09.2009    source источник


Ответы (6)


Я не верю, что форма предварительного просмотра, используемая объектом XtraReport, представлена ​​таким образом, что вы можете просто установить заголовок. Однако можно создать собственную форму предварительного просмотра. Это даст вам полный контроль над тем, как отображается ваш предварительный просмотр. К сожалению, использование этого подхода требует, чтобы вы вызывали предварительный просмотр по-другому. Вы больше не будете вызывать myReport.ShowPreviewDialog(). В этом примере отчет является закрытым элементом формы предварительного просмотра, который создается в событии загрузки формы. Но я бы передал ссылку на существующий объект отчета в форму до ее загрузки, чтобы вы могли повторно использовать одну форму предварительного просмотра.

person Kyle Gagnet    schedule 09.09.2009
comment
Спасибо Кайл! Однако у меня есть вопрос... Я заметил, что вы (или присланный вами учебник) используете PrintBarManager и PrintControl, в то время как Пьер предлагает использовать элемент управления PrintRibbon, каковы преимущества/недостатки этих двух подходов? - person Sebastian; 10.09.2009
comment
Особых преимуществ или недостатков не знаю. Это просто вопрос предпочтений. Сравните PrintControl в руководстве, на которое я ссылался, с этим снимком экрана PrintRibbonControl: imgur.com/N7WeL.png - person Kyle Gagnet; 10.09.2009
comment
Эй, Кайл, кажется, я нашел разницу... если вы хотите использовать Ribbon Control, вам нужно купить пакет XtraBars. По-видимому, если я просто куплю лицензию XtraReports, лента не будет включена. - person Sebastian; 14.09.2009

EDIT: очевидно, что если вы не вызовете CreateDocument, иногда он будет работать, а иногда нет. Так что убедитесь, что он там (его не было в моем первом посте).

Я считаю, что ответ Кайла неверен. Похоже, вы можете получить доступ к форме, просто она не интуитивно понятна. Как указал Пьер, есть веские причины для создания собственной формы, но если вы найдете форму по умолчанию и просто хотите настроить заголовок, попробуйте:

using(var rpt = new XtraReport1())
{
   rpt.PrintingSystem.PrintPreviewFormEx.Text = "My Custom Caption";
   rpt.CreateDocument();
   rpt.ShowPreviewDialog();
}
person Andrew Burns    schedule 22.09.2009
comment
Очень интересно Андрей. Вы правы, некоторые вещи не так интуитивны. +1 для вас, спасибо. - person Sebastian; 23.09.2009
comment
Интересно, есть ли способ сделать это внутри отчета. Я заинтересован в том, чтобы иметь базовый отчет со свойством ReportTitle, и при открытии производных отчетов назначать опору и позволять отчетам устанавливать заголовок. Если есть какой-то способ получить доступ к форме хостинга или что-то, что дает мне доступ... - person Sebastian; 26.09.2009

В наших проектах мы всегда создаем форму ReportViewer, целью которой является отображение XtraReport (или PrintingSystem).

Средство просмотра состоит из обычного XtraForm, на который мы бросаем PrintRibbonController. Это автоматически создаст полосу ленты и элемент управления печатью.

Затем мы используем метод, который привязывает отчет к просмотрщику:

public partial class ReportViewer : DevExpress.XtraEditors.XtraForm
{
    public ReportViewer()
    {
        InitializeComponent();
    }

    // Used when displaying a single report
    public void SetReport(XtraReport report)
    {
        this.printControl.PrintingSystem = report.PrintingSystem;
        report.CreateDocument();
        this.printControl.UpdatePageView();
    }

    // Used when displaying merged reports
    public void SetReport(PrintingSystem system)
    {
        this.printControl.PrintingSystem = system;
        this.printControl.UpdatePageView();
    }
}

Таким образом, отображение отчета выглядит следующим образом:

ReportViewer viewer = new ReportViewer();
viewer.SetReport(new EmployeeReport());
viewer.Show();

Такой подход к созданию собственного средства просмотра может помочь вам:

  • Управляет безопасностью пользователя (например: обычный пользователь не может изменить водяной знак),
  • Изменяет ленту, удаляя или добавляя кнопку в соответствии с вашими требованиями.
person Pierre-Alain Vigeant    schedule 09.09.2009
comment
Это очень полезно, Пьер, спасибо! Можете ли вы взглянуть на мои комментарии к ответу Кайла? - person Sebastian; 10.09.2009

Я думаю, что в поддержке devexpress есть статья, которая может вам помочь — Невозможно изменить окно предварительного просмотра отчета заголовок заголовка

Суть этого:

XtraReport1 rep = new XtraReport1();
            rep.CreateDocument();
            PrintPreviewFormEx form = new PrintPreviewFormEx();
            form.Text = "test";
            form.PrintingSystem = rep.PrintingSystem;
            form.Show(); 
person Troy    schedule 09.09.2011

Вы можете использовать класс ReportPrintTool для устранения проблемы:

var report = new MyXtraReport();
ReportPrintTool reportPrintTool = new ReportPrintTool(report);
reportPrintTool.PreviewForm.Text = "Some Text"
report.ShowPreviewDialog();    
person Igor Kustov    schedule 13.03.2012

Я нашел ответ Пьера очень полезным - наличие вашего собственного средства просмотра отчетов действительно может помочь вам управлять доступом и т.п. Я добавил этот код:

 PrintingSystemCommand[] commands = {PrintingSystemCommand.DocumentMap,
                                                   PrintingSystemCommand.Open,
                                                   PrintingSystemCommand.Save};

 this.printControl1.PrintingSystem.SetCommandVisibility(commands, CommandVisibility.None);

Конечно, у вас должны быть ссылки:

using DevExpress.XtraEditors;
using DevExpress.XtraReports.UI;
using DevExpress.XtraPrinting;

Еще раз спасибо.

person Chagbert    schedule 21.05.2012