Obtenir des valeurs de rangée courante lorsque liaison de données
-
22-08-2019 - |
Question
J'utilise DevExpress XtraReports dans une application WinForms, mais pourrait également appliquer à d'autres outils de reporting.
Je voudrais effectuer une certaine logique par ligne dans le rapport comme il est « rendu », sur une base ligne par ligne. Plus précisément, je voudrais cacher un code-barres si les données pour le code-barres ne sont pas disponibles.
Actuellement, je fais ce qui suit:
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;
}
}
Mais que tout simplement mauvais odeurs. Je voudrais accéder aux données actuelles ligne dans cette méthode et sur les propriétés « réelles » de l'objet, mais ne peut pas. Quel est le modèle typique pour cela dans d'autres générateurs de rapports? Suis-je même en utilisant l'événement correct? J'ai essayé Detail_BeforePrint
, mais cela n'a pas d'information supplémentaire.
La solution
Utilisation Detail_BeforePrint conjointement avec GetCurrentColumnValue () comme ceci:
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;
}
}