Hatena::ブログ(Diary)

憂国のプログラマ Hatena版

快走韋駄天
Amazon

2011-02-18 WPF 超入門

Q041. DataGrid のセルの値を中央や右寄せで表示したいのですが、どうすればいいですか?

| 10:44 | 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>

WPF FAQ の目次に戻る



Q042. DataGrid のセルの値を書式設定したいのですが・・・

| 15:13 | 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 型でコンバーター使う前は小数点が表示されていたのが、指定した書式どおりにひょうじされるようになりました。でも、この例だと判りにくいかも(汗)

f:id:hilapon:20110218151610p:image



関連記事WPF/Silverlight UIフレームワーク入門〜コンバータによるデータ変換


WPF FAQ の目次に戻る



英語で日記をつける。

| 15:53 | 英語で日記をつける。を含むブックマーク

私は英語が苦手です。気合で Pro WPF in C# 2010 を買ってみたものの毎日1ページも読めません。英字資料は翻訳サイトがないとお手上げの状況。TOEIC で100点取れるかどうかもかなり怪しいでしょうw 高得点の人から見たら鼻で笑われるレベルです。orz


Pro Wpf in C# 2010

Pro Wpf in C# 2010


しかし英語が読めないというのは技術力の向上を考えると大きな損です。で、TOEIC 関連のサイトを検索してたら以下のページを見つけました。


TOEIC勉強法の秘訣 〜 英語で日記をつけてみよう!!


なるほど、これはいいかも知れません!継続は力なりという言葉もあるわけで、今日から毎日可能な限りコツコツ日記をつけていこうと思います。

ちなみにあくまで自分の勉強用なんで、何の役にも立ちませんのであしからず!


Todays diary:

I've lived in Tokyo from 20 years before.

 

0672331195
Sams Adam Nathan
購入: 2人 クリック: 8回