Obter valores de linha atual quando ligação de dados
-
22-08-2019 - |
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.
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;
}
}