Pergunta

Eu preciso para serializar um design de relatório. Este é o cenário:

O aplicativo tem relatórios de base, digamos "Relatório de vendas" com um conjunto de colunas e design pré-definidos, como o corp. logotipo no cabeçalho. As necessidades dos usuários para ter a capacidade de alterar o layout adicionando, por exemplo, um rodapé com o endereço do escritório, ou números de página. Para fazer isso eles precisam editar o relatório, digite o designer e adicionar / mudar o que eles precisam. Isso mudou necessidades de layout de relatório para ser serializado para ser armazenado no banco de dados para esse usuário, então da próxima vez, o usuário abre o relatório, usando esse design.

Faz sentido?

Foi útil?

Solução

Aqui está uma versão simplificada de como eu fazer isso:

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);
}

classe Dentro 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;
}

Outras dicas

Eu acho que o que você está procurando é o método SaveLayout:

Salvar o relatório

YourReport report = new YourReport();

// Save the layout to a file.
report.SaveLayout(@"C:\YourReport.repx");

Carregando o relatório

YourReport report = new YourReport();

// Load the layout
report.LoadLayout(@"C:\YourReport.repx");

Editar:

aqui um ligação para o site de suporte DevExpress explicando como salvar a definição do relatório.

Você pode salvar / carga de e para um fluxo usando Salvar e LoadLayout substituições. Para o designer, você pode adicionar um manipulador de comando para interceptar o comando Salvar.

Estes artigos devem cobrir o que você precisa:

Como: Salvar e restaurar uma definição de relatório a partir de um fluxo

Como: Comandos Substituir no Designer do Usuário Final (Custom Saving)

E para ser completo: Lista de todos os do how-to

Edit: ligações fixas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top