1

多言語サポート「Ja」/「Nein」の文字列としてブール値をフォーマットする必要があります。DisplayFormatとEditFormatに必要な正しいフォーマット文字列は何ですか?デザインの列エディターとしてrepositoryItemTextEditでDevExpressを使用していますが、他のバインディング文字列形式でも同じだと思います。別のアプローチはありますか?

4

3 に答える 3

4

リテラル値「Ja」/「Nein」をローカリゼーションリソースに確実に抽出する必要があります。Laoujinは素晴らしい反応を示していますが、例を挙げて少し拡張します。

まず、ある種のローカリゼーションを使用するカスタムフォーマットプロバイダーを定義します

public class LocalizedBoolFormatter : IFormatProvider, ICustomFormatter
{
    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        bool value = (bool)arg;
        format = (format == null ? null : format.Trim().ToLower());

        switch (format)
        {
            case "yn":
                return GetLocalizedBool(value);
            default:
                return HandleDefaultFormat(arg, format, formatProvider);
        }
    }

    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
            return this;
        else
            return null;
    }
}

のプライベートメソッドは次のLocalizedBoolFormatter ようになります。

private string HandleDefaultFormat(object value, string format, IFormatProvider formatProvider)
{
    if (value is IFormattable)
        return ((IFormattable)value).ToString(format, formatProvider);
    else
        return value.ToString();
}

private string GetLocalizedBool(bool value)
{
    //extract from localization resources  
    //or use CultureInfo.CurrentCulture for poors man localization 
    return value ? "Ja" : "Nein";
}

次に、フォーマッターによってローカライズされるカスタムフォーマッターを使用して値を簡単にフォーマットできます

bool f = false;
string formatted = string.Format(new LocalizedBoolFormatter(), "{0:yn}", f);
Console.WriteLine (formatted);

DevExpress RepositoryItemTextEditを使用すると、次のようにカスタムフォーマットを使用できます。

repositoryItemTextEdit.DisplayFormat.Format = new LocalizedBoolFormatter();
repositoryItemTextEdit.DisplayFormat.FormatType = FormatType.Custom;
于 2012-09-03T15:31:32.897 に答える
3

ブール値を現在のロケールに自動的に変換することはできません。拡張メソッドを使用して、それらを変換できます。

public static string ToPrettyString(this bool value) {
    return value ? YourResource.TrueValue : YourResource.FalseValue;
}

より柔軟性が必要な場合は、答えを確認してください。ブール形式の文字列-True/FalseではなくYes/Noで、実装の例もありますIFormatProvider

于 2012-09-03T14:48:10.767 に答える
1

最も簡単な方法は、フォーマットされた値に別のプロパティまたは列を使用することです。データバインディングの解析/フォーマットイベントを使用することもできます。

repositoryItemTextEdit1.DataBindings[0].Format += new ConvertEventHandler(repositoryItemTextEdit1_Format);

repositoryItemTextEdit1.DataBindings[0].Parse += new ConvertEventHandler(repositoryItemTextEdit1_Parse);

void repositoryItemTextEdit1_Format(object sender, ConvertEventArgs e)
{
   return e.Value ? "Ja" : "Nein";
}

void repositoryItemTextEdit1_Parse(object sender, ConvertEventArgs e)
{
   return e.Value.Equals("Ja") ? yes : no;
}
于 2013-10-19T18:55:28.810 に答える