Как я могу сериализовать дизайн отчета DevExpress XtraReport
Мне нужно сериализовать дизайн отчета. Это сценарий:
Приложение имеет базовые отчеты, скажем, "Отчет о продажах" с набором предопределенных столбцов и дизайна, например, корп. логотип в шапке. Пользователи должны иметь возможность изменить этот макет, добавив, например, нижний колонтитул с адресом офиса или номера страниц. Для этого им нужно отредактировать отчет, ввести конструктор и добавить / изменить то, что им нужно. Этот измененный макет отчета должен быть сериализован для сохранения в базе данных для этого пользователя, поэтому в следующий раз пользователь откроет этот отчет, используя этот дизайн.
Имеет смысл?
3 ответа
Вот упрощенная версия того, как я это делаю:
XtraReport customReport;
customReport = new MyXtraReport();
byte[] layout = LoadCustomLayoutFromDB();
if (layout != null) {
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(layout)) {
customReport.LoadLayout(memoryStream);
}
}
using (XRDesignFormEx designer = new XRDesignFormEx()) {
MySaveCommandHandler customCommands = new MySaveCommandHandler(designer.DesignPanel);
designer.DesignPanel.AddCommandHandler(customCommands);
designer.OpenReport(customReport);
designer.ShowDialog(this);
if (customCommands.ChangesSaved)
SaveCustomLayoutToDB(customCommands.Layout);
}
Внутри класса MySaveCommandHandler:
public virtual void HandleCommand(ReportCommand command, object[] args, ref bool handled) {
if (command != ReportCommand.SaveFileAs && command != ReportCommand.SaveFileAs)
return;
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream()) {
panel.Report.SaveLayout(memoryStream);
this.layout = memoryStream.ToArray();
changesSaved = true;
}
panel.ReportState = ReportState.Saved;
handled = true;
}
Я думаю, что вы ищете метод SaveLayout:
Сохранение отчета
YourReport report = new YourReport();
// Save the layout to a file.
report.SaveLayout(@"C:\YourReport.repx");
Загрузка отчета
YourReport report = new YourReport();
// Load the layout
report.LoadLayout(@"C:\YourReport.repx");
Редактировать:
здесь ссылка на сайт поддержки devexpress, объясняющая, как сохранить определение отчета.
Вы можете сохранить / загрузить в и из потока, используя переопределения Save и LoadLayout. Для дизайнера вы можете добавить обработчик команд для перехвата команды сохранения.
Эти статьи должны охватывать то, что вам нужно:
Как: сохранить и восстановить определение отчета из потока
Как переопределить команды в конструкторе конечного пользователя (пользовательское сохранение)
И для полноты: список всех с практическими рекомендациями
Редактировать: фиксированные ссылки