Pergunta

Eu estou usando DevExpress XtraReports em um aplicativo WinForms, mas pode igualmente aplicar-se a outras ferramentas de relatórios.

Eu gostaria de executar alguma lógica per-linha no relatório como ele é "traduzida", em uma base linha por linha. Especificamente eu gostaria de esconder um código de barras, se os dados para o código de barras não está disponível.

Atualmente estou fazendo o seguinte:

private void xrBarCode2_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
    var barcode = (XRBarCode)sender;

    if (barcode.Text.Trim() == "")
    {
        barcode.Visible = false;
        lblWarning.Visible = true;
    }
    else
    {
        barcode.Visible = true;
        lblWarning.Visible = false;
    }
}

Mas isso simplesmente cheira mal. Eu gostaria de acessar a linha de dados atual neste método e trabalhar sobre as propriedades "reais" do objeto, mas não pode. Qual é o padrão típico para isso em outros geradores de relatório? Eu ainda estou usando o evento correto? Tentei Detail_BeforePrint, mas que não tinha nenhuma informação adicional.

Foi útil?

Solução

Use Detail_BeforePrint em conjunto com GetCurrentColumnValue () assim:

private void Detail_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
    if (string.IsNullOrEmpty(GetCurrentColumnValue("BarcodeColumnName"))) {
        barcode.Visible = false;
        lblWarning.Visible = true;
    } else {
        barcode.Visible = true;
        lblWarning.Visible = false;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top