在 WinGrid(Infragistics,如果你必须知道的话)中,我得到了一个包含int
s 的列。该值是秒数,您可以从中计算时间。我创建了一个 IFormatProvider/ICustomFormatter 来做到这一点。在网格初始化期间,我设置了 Format 和 FormatInfo 参数。
但是,当在我的自定义类型格式化程序上调用 GetFormat 时,类型参数始终是 NumberFormatInfo,而不是 ICustomFormatter。为什么?
这是我的课,以防万一:
public class SecToTime : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
{
return this;
}
else
{
return null;
}
}
public string Format(string format, object arg, IFormatProvider provider)
{
if (arg is int)
{
int seconds = (int)arg;
int hours = (int)Math.Truncate((double)seconds / 3600);
int minutes = (int)Math.Truncate((double)(seconds / 60) % 60);
seconds = seconds % 60;
return string.Format("{0:hh:mm:ss}", new DateTime(0, 0, 0, hours, minutes, seconds));
}
else
throw new ArgumentNullException();
}
}