GetFormat永远不会获得IFormatProvider类型

时间:2011-03-09 20:05:06

标签: c# format iformatprovider

在WinGrid(Infragistics,如果你必须知道)中,我得到一个包含int的列。该值是秒数,您可以从中计算时间。我创建了一个IFormatProvider / ICustomFormatter来做到这一点。在网格初始化期间,我设置了Format和FormatInfo参数。

但是,在我的自定义类型格式化程序上调用GetFormat时,type参数始终是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();
    }
}

1 个答案:

答案 0 :(得分:0)

从Infragistics团队引用(伟大的)Mike Salzman:

  

不会调用FormatInfo   除非Format属性也是   组。这是我能做到的唯一原因   想想为什么它不会被召唤。

来源:this Infragistics forum's post

要测试它,请尝试将列Format属性设置为......:)