2008-10-01 5 views
1

J'ai quelques formules dans mes rapports, et pour empêcher Divsion par zéro Je aime ceci dans le champ d'expression:ReportViewer Division par zéro

= IIF (champs F1.Value <> 0, les champs F2!. Value/Fields! F1.Value, 0)

Cela fonctionne normalement bien, mais lorsque F1 et F2 sont à zéro, je reçois "#Error" dans le rapport, et j'obtiens cet avertissement: "L'expression de la valeur pour le La zone de texte 'textbox196' contient une erreur: Tentative de division par zéro. "

Pourquoi est-ce?

Répondre

1

Il doit y avoir une plus jolie façon que cela, mais cela devrait fonctionner:

=IIF(Fields!F1.Value <> 0, Fields!F2.Value/
    IIF(Fields!F1.Value <> 0, Fields!F1.Value, 42), 0) 
+0

Dégoûtant, mais fonctionne .. Pourquoi je ne peux pas écrire simplement:! champs IF F1.Value <> 0 Then Les champs F2.Value/champs F1.Value Else Fin Si comme CrystalReports .. que je suis en train de migrer loin de .. soupir. – neslekkiM

3

IIF() est juste une fonction, et comme avec toutes les fonctions tous les arguments sont évalués avant la fonction est appelée, y compris Fields!F2.Value/Fields!F1.Value. En d'autres termes, il tentera de diviser par zéro malgré la condition Fields!F1.Value <> 0.

+0

Ah, oui, bien sûr, commence à se souvenir de VB .. Mais, quel genre de solutions se pose à ce problème? Pour autant que je sache, je ne peux pas entrer un extrait VBA comme une expression, ou ai-je tort? – neslekkiM

+0

Je ne suis pas sûr: VB9 (.Net 3.5) supporte un nouveau If() _operator_ qui fonctionne comme un opérateur ternaire basé sur C (?). VB8 (.Net2.0) prend en charge les constructions If/Else en ligne. Mais je ne pense pas que cela fonctionnera avec ReportViewer. –

+0

J'ai peut-être tort, mais je ne pense pas que cela explique le problème. La chose de neslekkiM fonctionne bien quand seulement F1 == 0, mais pas quand * both * sont 0, non? Plus Joel, votre expression de division ne correspond pas à ce que neslekkiM a écrit - son F1 a le diviseur, pas F2. – cori

0

Cependant, vous pouvez utiliser

if Fields!F1.Value <> 0 
then 
Fields!F2.Value/Fields!F1.Value 
else 0 

qui devrait fonctionner, car il n'évalue pas alors clause si la section "if" est fausse.

+0

ne vois pas le commentaire que j'ai fait sur la réponse acceptée, peut-être que cela a changé maintenant, mais je ne pouvais pas l'écrire comme ça à l'époque. – neslekkiM