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

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

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

Re[3]: DataGridTextColumnno


(過去ログ 124 を表示中)

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

■73744 / inTopicNo.1)  DataGridTextColumnno
  
□投稿者/ らぐんす (4回)-(2014/10/28(Tue) 19:36:00)

分類:[.NET 全般] 

いつもお世話になっております、

現在SilverLightでプロジェクト開発をしておりまして、どうしても分からない箇所があるので、ご教授くだされば...

DataGridに通貨および金額の2列を表示したいのですが…
通貨毎に金額の小数点の桁数を分けて表示したいのです
  
| 通貨 | 金額   |

| GBP  | 1,500.450 |・・・小数点3桁
| USD  | 2,100.00 |・・・小数点2桁
| JPY  | 1,200  |・・・小数点なし

<sdk:DataGridTextColumn Binding="{Binding MONEY, StringFormat=##0.00}" Header="金額" ・・・

のように列全体の表記はできるのですが...いわゆるセル毎にできますでしょうか?
ヨロシクお願いいたします
 


引用返信 編集キー/
■73751 / inTopicNo.2)  Re[1]: DataGridTextColumnno
□投稿者/ Hongliang (245回)-(2014/10/29(Wed) 15:01:58)
案1. MONEYをバインドするのでは無く自身をバインドするようにして、
IValueConverterで変換する。
{Binding Converter={StaticResource moneyConverter}}
class MoneyConverter : IValueConverter {
    private Dictionary<string, string> m_Formats = new Dictionary<string, int>();
    public MoneyConverter() {
        this.m_Formats["JPY"] = "##0";
        this.m_Formats["USD"] = "##0.00";
    }
    public object Convert(...) {
        var row = (型)value;
        return row.MONEY.ToString(this.m_Formats[row.通貨]);
    }
}

案2. LOCALIZED_MONEYみたいなString型プロパティをMONEYとは別に追加して、そっちをバインドする。
書式化はLOCALIZED_MONEYのget内で済ませる。

いずれもDataGrid上で編集する必要があるなら難しいですが。

引用返信 編集キー/
■73753 / inTopicNo.3)  Re[2]: DataGridTextColumnno
□投稿者/ らぐんす (6回)-(2014/10/29(Wed) 20:28:48)
Hongliang様>ありがとうございます。
案2について
金額(MONEY)も、税込金額(KMONEY)だったり税額(TMONEY)だったり、いくつも種類があって、その都度LOCALIZED_MONEY的なものを作成していくのは抵抗があります...

案1について
通貨が固定数ではなくマスタに連動しているため、数が不明なのでDictionaryを作成する前に、通貨を網羅してないといけませんね。

|CURRENCY|MONOEY   |OUTPUT

| GBP  | 1,500.450|"#,##0.000"
| USD  | 2,100.00 |"#,##0.00"
| JPY  | 1,200  |"#,##0"

XAMLについては原理が分かっていないので適当にそれっぽく記述しているのですが
<sdk:DataGridTextColumn Binding="{Binding MONEY, StringFormat={Binding OUTPUT}}" Header="金額" ・・・
的なことをやっても見事にエラります(画面表示できません)

MoneyConverterにプロパティに引数ありコンストラクタを設定できないのでしょうか?OUTPUTを渡して
public object Convert(...) {
var row = (型)value;
return row.MONEY.ToString(OUTPUT);
}
で表現できればと思ってもエラります

無知で申し訳ありませんが、よろしくお願いします

引用返信 編集キー/
■73754 / inTopicNo.4)  Re[3]: DataGridTextColumnno
□投稿者/ Hongliang (246回)-(2014/10/29(Wed) 20:57:17)
> MoneyConverterにプロパティに引数ありコンストラクタを設定できないのでしょうか?OUTPUTを渡して
> public object Convert(...) {
>         var row = (型)value;
>         return row.MONEY.ToString(OUTPUT);
>     }

{Binding Converter={StaticResource moneyConverter}, ConverterParameter=MONEY}
public object Convert(...) {
    var row = (型)value;
    switch ((string)parameter) {
        case "MONEY": return row.MONEY.ToString(row.OUTPUT);
        case "TMONEY": return row.TMONEY.ToString(row.OUTPUT);
        // 固定文字列でswitchやってるけど、リフレクションなどでプロパティ検索してもいい
        // rowがDataRowViewならそのままrow[(string)parameter]でもいい
    }
}
みたいにするのはどうでしょう?

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -