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:

FormatInfo няма да бъде извикан, освен ако също не е зададено свойството Format. Това е единствената причина, поради която се сещам защо няма да бъде наречено.

Източник: тази публикация във форума на Infragistics

За да го тествате, опитайте да зададете свойството на колона Format на нещо... :)

person digEmAll    schedule 09.03.2011
comment
Настроен е на нещо. Опитах различни неща, но изглежда не променя параметъра тип, който GetFormat получава. - person Tipx; 09.03.2011
comment
Странно... вашият основен източник на данни DataTable ли е? Ако случаят е такъв, типът на съответната колона dataTable зададен ли е на int? - person digEmAll; 10.03.2011
comment
Основният източник на данни е източник на свързване, а източникът на данни на източника на свързване е таблицата с данни. Моята колона.DataType е Int32. - person Tipx; 10.03.2011
comment
Ммм, току-що направих този тест --› (връзка) и работи добре... забелязвате ли нещо наистина различен от вашия код? - 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
Опитах се да създам нова решетка и всичко останало и тя продължи да прави същото. Не знам дали проблемът е в моята версия на infragistics или не, но току-що зададох въпроса във форума на infragistics. - person Tipx; 10.03.2011
comment
Майк ми отговори и изглежда, че това е грешка, която е коригирана в по-нова версия! Ето връзката към публикацията на infragistic: forums.infragistics.com/forums/p/53107 /275535.aspx - person Tipx; 11.03.2011
comment
@Tipx: о, използвахте infragistics 7... Аз пробвах infragistics 10, така че това обяснява всичко :D - person digEmAll; 11.03.2011