GetFormat никогда не получает тип IFormatProvider

В WinGrid (Infragistics, если хотите знать) я получил столбец, содержащий ints. Значение представляет собой количество секунд, из которых можно рассчитать время. Я создал 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();
    }
}

person Tipx    schedule 09.03.2011    source источник


Ответы (1)


Цитируя (великого) Майка Зальцмана из Infragistics Team:

FormatInfo не будет вызываться, если также не установлено свойство Format. Это единственная причина, по которой я могу придумать, почему это не будет называться.

Источник: сообщение на форуме Infragistics

Чтобы проверить это, попробуйте установить свойство столбца Format на что-нибудь... :)

person digEmAll    schedule 09.03.2011
comment
Он настроен на что-то. Я пробовал разные вещи, но, похоже, это не меняет параметр типа, который получает GetFormat. - person Tipx; 09.03.2011
comment
Странно... является ли ваш базовый источник данных DataTable? Если это так, установлен ли для Type соответствующего столбца dataTable значение int ? - person digEmAll; 10.03.2011
comment
Базовый источник данных является источником привязки, а источником данных источника привязки является таблица данных. Мой столбец. DataType - это Int32. - person Tipx; 10.03.2011
comment
Ммм, я только что сделал этот тест --› (link), и он работает нормально... вы заметили что-то действительно отличается от вашего кода? - person digEmAll; 10.03.2011
comment
Ничего себе, я просто не вижу, в чем отличие :-S Единственное, что я вижу, это то, что вы подписываете сетку на InitializeLayout в конструкторе формы, но я сделал это через дизайнер. Я изменил свой .Format на #### (я пробовал разные вещи), и проблема все та же. Я удалю / воссоздам свою сетку, чтобы увидеть, не произошло ли что-то скрытое, и буду держать вас в курсе. Большое спасибо за вашу помощь, сэр! - person Tipx; 10.03.2011
comment
@Tipx: ну, так что я понятия не имею ... вы можете попробовать спросить на форуме инфрагистики. Если вы можете воспроизвести проблему в небольшом проекте, вы также можете опубликовать ее, и они ее рассмотрят... - person digEmAll; 10.03.2011
comment
@Tipx: в противном случае вы также можете загрузить исходный код инфрагистики и файлы .pdb и попытаться отладить их самостоятельно :) - person digEmAll; 10.03.2011
comment
Я попытался создать новую сетку и все такое, и она продолжала делать то же самое. Я не знаю, проблема в моей версии инфрагистики или нет, но я просто задал вопрос на форуме инфрагистики. - person Tipx; 10.03.2011
comment
Майк ответил мне, и похоже, что это ошибка, которая была исправлена ​​в более новой версии! Вот ссылка на сообщение Infragistic: forums.infragistics.com/forums/p/53107 /275535.aspx - person Tipx; 11.03.2011
comment
@Tipx: о, вы использовали инфрагистику 7 ... Я пробовал инфрагистику 10, так что это все объясняет: D - person digEmAll; 11.03.2011