aufgerufen. Ich versuche herauszufinden, wie IFormatProvider und ICustomFormatter nach Format TimeSpan in DataGridView column zum Anpassen eines TimeSpan in einem DataGridView arbeiten. Ich habe einen vollständig benutzerdefinierten Formatierer erstellt, der unabhängig von der Formatierung immer "foo" zurückgibt.Versuchen Sie, ein benutzerdefiniertes Formatierungsprogramm zu implementieren, aber ICustomFormatter.Format wird nie
Ich benutze es auf Int, aber ich nehme an, es sollte auf alle Typen funktionieren, da es nicht überprüft, dass der Wert übergeben wird, es gibt nur "foo"
zurück.
class MyFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
Console.WriteLine("GetFormat");
return this;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
Console.WriteLine("Format");
return "foo";
}
}
Und ich bin es vorbei an int.ToString()
:
int number = 10;
Console.WriteLine(number.ToString(new MyFormatter()));
Was ich bekomme ist:
GetFormat 10
Während das, was ich hatte gehofft, zu bekommen:
GetFormat Format foo
Edit: Ich fand How to create and use a custom IFormatProvider for DateTime? und die Antworten dort sagen, dass DateTime.ToString()
wird nichts akzeptieren, aber DateTimeFormatInfo
oder CultureInfo
und ein Objekt wird abgelehnt, wenn es nicht von diesen Typen ist, auch wenn es implementiert ICustomFormatter
- https://stackoverflow.com/a/2382481/492336.
Also meine Frage ist dann, dass in allen Fällen der ToString()
Methoden gilt? Gilt es auch für DataGridView und in welchen Fällen kann ich einen wirklich benutzerdefinierten Formatierer übergeben?
Ich bezweifle, es hilft aber 'Console.WriteLine (string.Format (neu MyFormatter() "{0}", number));' erstellt die korrekte Ausgabe – stuartd