C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: GridViewのDataFormatString


(過去ログ 58 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■33032 / inTopicNo.1)  GridViewのDataFormatString
  
□投稿者/ かず (1回)-(2009/02/19(Thu) 13:22:36)

分類:[C#] 

C#開発です

質問1.GridViewへDBの値を表示するとDB上では1.1という値なんですが1.10と表示されてしまいます。この原因がまずわかりません

質問2.質問1に続きますが、GridViewのDataFormatStringプロパティから{0:f1}などとすると1.1と表示されます。この場合値が0を表示しようとすると0.0とでてしまいます。0は0と表示し1.1は1.1と表示する方法を教えて下さい


よろしくお願いいたします
引用返信 編集キー/
■33036 / inTopicNo.2)  Re[1]: GridViewのDataFormatString
□投稿者/ 魔界の仮面弁士 (1003回)-(2009/02/19(Thu) 14:58:32)
No33032 (かず さん) に返信
> 分類:[C#]
分類が[ASP.NET (C#)]ではなく、[C#] になっていますので、
System.Web.UI.WebControls.DataGrid ではなく、
System.Windows.Forms.DataGrid に対する質問だと誤解されますよ。

DataFormatString の話題が出てきた所を見ると、Web 開発の話なのですよね?


> DB上では1.1という値なんですが1.10と表示されてしまいます。

有効桁数はともかく、値としては共に同じ数ですね。

何らかの書式は指定されていますか?
たとえば、DataFormatString を指定しても桁数を制御できないという意味であれば、
HtmlEncodeFormatString プロパティの状態も確認しておいてください。

書式を指定しない場合の話だとしたら、その表記方法はデータ型によって異なりますので、
その列のデータ型を確認してみてください。
(DB 上の型、および DataView (DataTable/SqlDataSource) 上の列の型)


そもそも、DB 側のデータ型が、小数以下の桁数が固定的な型である場合には、
1.1 と 1.10 を区別する事はできないかと思います。

一方、.NET 側でいうと、C# の decimal 型は、小数点以下の「桁数」を保持しているため、
1.1 と 1.10 を区別できますが、float や double はそうではありません。

decimal a = 1.1m;
decimal b = 1.10m;
float c = 1.1f;
float d = 1.10f;

Console.WriteLine(a); // 1.1
Console.WriteLine(b); // 1.10
Console.WriteLine(c); // 1.1
Console.WriteLine(d); // 1.1 … 1.10 ではない



> 0は0と表示し1.1は1.1と表示する方法を教えて下さい
DataFormatString での指定方法は分かりません。

DB 側の SQL で、その列を文字列化しておく事はできないでしょうか。

あるいは DataSet を経由させているなら、DataTable 側に式列を作り、
 dt.Columns.Add("F1", typeof(decimal));
 dt.Columns.Add("Sample", typeof(string), "IIF(F1=0, '0', CONVERT(F1, 'System.String'))");
のように、0 を 文字列 "0" に置き換えるとか。

# 編集用の列と表示用の列を分ける事になりますけれども。
引用返信 編集キー/
■33051 / inTopicNo.3)  Re[2]: GridViewのDataFormatString
□投稿者/ かず (2回)-(2009/02/19(Thu) 17:42:23)
> DataFormatString の話題が出てきた所を見ると、Web 開発の話なのですよね?
はい、WEBでの話です。

>何らかの書式は指定されていますか?
ただ単にGridViewへ値を表示しているだけで設定など初期のままで何もしておりません。

少数がある場合に結果的にすべて少数第二位まで表示しているようです。この場合は0は0として表示されてます。
どこの設定から少数第二位までなのかが不明なこと、書式の設定方法をお願い致します。

>あるいは DataSet を経由させているなら、DataTable 側に式列を作り、
> dt.Columns.Add("F1", typeof(decimal));
> dt.Columns.Add("Sample", typeof(string), "IIF(F1=0, '0', CONVERT(F1, 'System.String'))");
>のように、0 を 文字列 "0" に置き換えるとか。
表示事態はDataSetを使用しておりませんがその考えで変えることはできると思います。ですが、書式プロパティがあるため
簡潔にできるものと思いますので方法を知りたいです。
色々試してますがうまくいきません。

引き続き質問を継続したいと思います。
宜しくお願いいたします。

引用返信 編集キー/
■33059 / inTopicNo.4)  Re[3]: GridViewのDataFormatString
□投稿者/ 魔界の仮面弁士 (1006回)-(2009/02/19(Thu) 19:08:41)
No33051 (かず さん) に返信
>>DataFormatString の話題が出てきた所を見ると、Web 開発の話なのですよね?
> はい、WEBでの話です。
ASP.NET という分類もありますので、次回投稿時には御留意を。

> 少数がある場合に結果的にすべて少数第二位まで表示しているようです。
# 少数→小数

> 書式プロパティがあるため
> 簡潔にできるものと思いますので方法を知りたいです。
書式に指定できるフォーマットは、MSDN の『書式設定の概要』の記載に準じるはずです。

やりたい事が、0 の場合のみ小数点を表示したくない、という点にあるのなら、
[カスタム数値書式指定文字列] の解説にある "セクション区切り記号" 「;」を
利用することができるかと思います。

正数/負数/ゼロそれぞれの書式を記述できますので、例えば、
{0:$#,##0.00;($#,##0.00);Zero} と指定すれば、
 0 → "Zero"
 0.1 → "$0.10"
 -35.96 → "($35.96)"
のように変換されます。

そうではなく、1.1 と 1.10 を区別して表示したいという意図であるならば、私には分かりません。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -