DataGridView에서 TimeSpan을 사용자 정의하는 방법에 대해 Format TimeSpan in DataGridView column을 수행 한 후 IFormatProvider 및 ICustomFormatter가 작동하는 방식을 파악하려고합니다. 필자는 포맷팅에 관계없이 항상 "foo"를 반환하는 완전히 사용자 정의 된 포맷터를 만들었습니다.사용자 정의 포맷터를 구현하려고하지만 ICustomFormatter.Format은 호출되지 않습니다.
저는 Int에서 사용하고 있지만 전달되는 값을 확인하지 않으므로 모든 유형에서 작동해야한다고 가정합니다. 단지 "foo"
을 반환합니다.
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";
}
}
그리고 int.ToString()
에 전달 해요 :
int number = 10;
Console.WriteLine(number.ToString(new MyFormatter()));
내가 받고 있어요 것은 : 내가 무엇을 얻을 수 있었으면되었다
GetFormat 10
입니다
동안 :GetFormat Format foo
편집 : 내가 How to create and use a custom IFormatProvider for DateTime?을 찾았으며 응답에서 DateTime.ToString()
은 DateTimeFormatInfo
또는 CultureInfo
을 허용하지 않으며 ICustomFormatter
- https://stackoverflow.com/a/2382481/492336을 구현하더라도이 유형이 아닌 경우 객체가 거부됩니다.
그렇다면 내 질문에 따르면 ToString()
메서드의 모든 경우를 보류합니까? DataGridView에도 적용 되는가? 그리고 어떤 경우에 진정한 맞춤형 포맷터를 전달할 수 있습니까? 당신이 정수에 ToString을 호출하는 IFormatProvider를 제공 할 때
내가 그것을 도움이되지만'Console.WriteLine (및 String.format (새 MyFormatter()는, "{0}", 수)) 의심,'올바른 출력 – stuartd