2011-02-18 WPF 超入門
Q041. DataGrid のセルの値を中央や右寄せで表示したいのですが、どうすればいいですか?
A. DataGridTextColumn.ElementStyle プロパティ でスタイルを設定します。
<DataGridTextColumn Header="登録日" Width="40" Binding="{Binding Path=regist_date}" > <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}" > <Setter Property="Margin" Value="2" /> <Setter Property="TextAlignment" Value="Center" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> <DataGridTextColumn Header="基本料金" Width="40" Binding="{Binding Path=price}" > <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}" > <Setter Property="Margin" Value="2" /> <Setter Property="TextAlignment" Value="Right" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn>
Q042. DataGrid のセルの値を書式設定したいのですが・・・
A. コンバータークラスを用意し、 Binding.Converter プロパティに設定します。
以下の例は、数値データを単純に #,##0 形式で表示するサンプルです。
Double や Decimal 型のデータをバインドすると少数点以下を 123,456.00 と表示してしまうことがあるので、書式を指定して小数点以下の値を表示しないようにします。
まず IValueConverter インターフェイスを実装するクラスを用意します。
/// <summary> /// 数値を指定書式に変換するコンバーター /// </summary> public class NumericFormatConverter : IValueConverter { public string Format { get; set; } public NumericFormatConverter() { Format = "#,##0"; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string ret = "0"; if ( value != null && IsNumeric(value) ) { ret = ((decimal)value).ToString(Format); } return ret; } public static bool IsNumeric(object value) { decimal ret; return decimal.TryParse(value.ToString(), NumberStyles.Any, null, out ret); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { decimal ret = 0m; decimal.TryParse(value.ToString(), NumberStyles.Any, null, out ret); return ret; } }
次に作成したクラスを XAML のリソースに定義します。事前にプロジェクトを XML 名前空間で定義しとくことを忘れずに。このサンプルでは 「local」 としています。
<local:NumericFormatConverter x:Key="numericConverter" />
DataGridTextColumn の Binding.Converter にリソースを指定します。リソース経由めんどくさいと思って Converter={StaticResource numericConverter} と書いたら、実行時に XamlParseException 例外が発生しました。詳しい仕組みはまだ判ってませんが、リソース経由でないとだめみたいです。
<DataGridTextColumn Header="高速料金" Width="45*" Binding="{Binding Path=tollway, Converter=local:numericConverter}" > <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}" > <Setter Property="Margin" Value="2" /> <Setter Property="TextAlignment" Value="Right" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn>
実行するとこうなります。データは Decimal 型でコンバーター使う前は小数点が表示されていたのが、指定した書式どおりにひょうじされるようになりました。でも、この例だと判りにくいかも(汗)
関連記事 : WPF/Silverlight UIフレームワーク入門〜コンバータによるデータ変換
英語で日記をつける。
私は英語が苦手です。気合で Pro WPF in C# 2010 を買ってみたものの毎日1ページも読めません。英字資料は翻訳サイトがないとお手上げの状況。TOEIC で100点取れるかどうかもかなり怪しいでしょうw 高得点の人から見たら鼻で笑われるレベルです。orz
- 作者: Matthew MacDonald
- 出版社/メーカー: Apress
- 発売日: 2010/04/30
- メディア: ペーパーバック
- 購入: 5人 クリック: 133回
- この商品を含むブログ (7件) を見る
しかし英語が読めないというのは技術力の向上を考えると大きな損です。で、TOEIC 関連のサイトを検索してたら以下のページを見つけました。
なるほど、これはいいかも知れません!継続は力なりという言葉もあるわけで、今日から毎日可能な限りコツコツ日記をつけていこうと思います。
ちなみにあくまで自分の勉強用なんで、何の役にも立ちませんのであしからず!
Todays diary:
I've lived in Tokyo from 20 years before.




