0

基本的な .net DataColumns と関連する Expression プロパティを使用しています。

データベース テーブルから選択する列をユーザーが定義できるアプリケーションがあります。また、データ列で式を実行する他の列を追加して、情報のカスタム グリッドを作成することもできます。

私が抱えている問題は、「(C2/C3)*100」の行に沿って計算列がある場合です。ここで、C2 と C3 はデータ列であり、C3 の値はゼロです。古い「ゼロで割る」問題。

簡単な答えは、式を「IIF(C3 = 0, 0, (C2/C3)*100)」に変換することですが、ユーザーがそれを行うことを知っているとは思わず、コンパイル時に私は知りませんどの列が定義されているかを知っています。そのため、IIF 句を作成するために、除算で使用されている列をプログラムで特定する必要があります。それはかなりトリッキーになる可能性があります。

「ゼロ除算」エラーが発生した場合に、エラーをスローせずに結果を 0 に置き換える別の方法はありますか?

4

1 に答える 1

0

わかりました、私は方法を見つけました。重要なのは、列タイプにDecimalではなくDoubleを使用することです。たとえば、上記の例では、C3はDoubleである必要があります。これにより、代わりにInfinityの結果が得られ、式全体を使用して評価することができます。

例:IIF(CONVERT(([C4] / [C3])* 100、'System.String')='NaN' OR CONVERT(([C4] / [C3])* 100、'System.String')= ' Infinity'OR CONVERT(([C4] / [C3])* 100、' System.String')='-Infinity'、0、([C4] / [C3])* 100)

10進数では、そのInfinityオプションは提供されていないようです。

于 2012-05-25T04:26:59.820 に答える