none
BOUND列で数値が0の場合、未表示にする書式設定は? RRS feed

  • 質問

  • 数値が0の場合、表を見やすくするため、非表示にして空白で表示するようにしたいのですが、bound列の書式を簡単に設定できないでしょうか。

    ちなみにTenmplate列では

    Text='<%# EVAL("列名", "{0:#,###}") %>'で行っています。

    よろしくお願いします。

     

    2006年7月27日 4:30

回答

  • > %表示も同様のようです。 HtmlEncode="false"をいれないと書式設定はできないようですね。

    私の環境では HtmlEncode は true であっても false であっても、書式設定は適用されます。ただ、#,### という書式文字列が 0 になってしまうという問題はあるように見えます。

    足羽の桜さんは「できない」としかかかれていないので、具体的にどんな設定をしてどのような結果になってしまったのかはわかりませんが、おそらく数値用の書式を設定しているのが原因だと思われます。

    ちょっと調べたところ、HtmlEncode が true の場合、フィールドは強制的に文字列型に変換されてしまうというのが ASP.NET の仕様のようです。この場合、0 という数値は "0" という文字列へ変換され、HTMLEncode が実施された後に書式指定が適用されるため、このような動作になっているようです。

    HtmlEncode はフィールドの値がエスケープを必要な値を保持していないことが保障されているなら、false に変更しておくとよいかんじですね。(デフォルトが true なのは、どんなテーブルのカラムが設定されるかわからないからでしょうか)

    個人的には書式指定による値のフォーマット化を先に行うこともできるんじゃないかと思ったりしましたが、そうすると書式指定文字列に含まれたエスケープするべきでないエスケープ対象文字と、データベースから取り出した値としてのエスケープするべきエスケープ対象文字の区別をすることが非常に困難になってしまうので、このような仕様なのだと思います。

     

    2006年7月27日 11:38

すべての返信

  • "{0:#,###;;}" で、いいと思います。
    2006年7月27日 5:11
    モデレータ
  • この設定ではうまくいかないのですが?
    2006年7月27日 5:58
  • 型が文字列型じゃないでしょうか? 数値型じゃないと効きません。
    2006年7月27日 6:08
    モデレータ
  • はい,数値型です。

    2006年7月27日 8:38
  • 解決しました。 下記のように HtmlEncode="false"を追加する事で0が未表示になりました。

    DataFormatString="{0:#,###}" HtmlEncode="false"

    %表示も同様のようです。 HtmlEncode="false"をいれないと書式設定はできないようですね。

    もしかしたら、これはASP.NET2の不具合ではないかと思いますが?

     

    2006年7月27日 8:55
  • > %表示も同様のようです。 HtmlEncode="false"をいれないと書式設定はできないようですね。

    私の環境では HtmlEncode は true であっても false であっても、書式設定は適用されます。ただ、#,### という書式文字列が 0 になってしまうという問題はあるように見えます。

    足羽の桜さんは「できない」としかかかれていないので、具体的にどんな設定をしてどのような結果になってしまったのかはわかりませんが、おそらく数値用の書式を設定しているのが原因だと思われます。

    ちょっと調べたところ、HtmlEncode が true の場合、フィールドは強制的に文字列型に変換されてしまうというのが ASP.NET の仕様のようです。この場合、0 という数値は "0" という文字列へ変換され、HTMLEncode が実施された後に書式指定が適用されるため、このような動作になっているようです。

    HtmlEncode はフィールドの値がエスケープを必要な値を保持していないことが保障されているなら、false に変更しておくとよいかんじですね。(デフォルトが true なのは、どんなテーブルのカラムが設定されるかわからないからでしょうか)

    個人的には書式指定による値のフォーマット化を先に行うこともできるんじゃないかと思ったりしましたが、そうすると書式指定文字列に含まれたエスケープするべきでないエスケープ対象文字と、データベースから取り出した値としてのエスケープするべきエスケープ対象文字の区別をすることが非常に困難になってしまうので、このような仕様なのだと思います。

     

    2006年7月27日 11:38
  • HtmlEncode="false"にしないと書式設定が有効にならないのは、BoundFieldの場合だけですよね?
    BoundFieldの場合は、確かにHtmlEncode="false"にする必要がありました。
    しかし、Evalの場合は、こちらでは問題なく書式設定が有効になって空白になっているのですが、どこかが違うんですね。どこだろう?

    2006年7月28日 4:28
    モデレータ
  • 上の投稿にかいてますが、HtmlEncode が true であっても書式設定は有効です。(理由もかいてあるとおり)
     
    Eval static method と書式設定はまったく別物で、Eval は各コンテキストを展開するときに文字列にしてテキストブロックに埋め込まれるんだと思います。(動きからのまったくの予想)
    2006年7月29日 15:22