Pregunta

Estoy usando DevExpress XtraReports en una aplicación Windows Forms, pero igualmente podría aplicarse a otras herramientas de informes.

Me gustaría realizar alguna lógica por fila en el informe, ya que se "rindió", sobre una base de fila por fila. Específicamente me gustaría ocultar un código de barras si los datos para el código de barras no está disponible.

Actualmente estoy haciendo lo siguiente:

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

Pero eso simplemente huele mal. Me gustaría tener acceso a la fila de datos actual en este método y trabajar en las propiedades "reales" del objeto, pero no puedo. ¿Cuál es el patrón típico de esto en otros generadores de informes? ¿Estoy incluso utilizando el evento correcto? Probé Detail_BeforePrint, pero que no tenía información adicional.

¿Fue útil?

Solución

Uso Detail_BeforePrint en conjunción con GetCurrentColumnValue (), así:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top