Смешные проблемы DateTimePicker - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть некоторые забавные (?!?) Проблемы с DateTimePicker, и, надеюсь, кто-нибудь может мне помочь.У меня есть форма с DateTimePicker, и я хочу связать ее со свойством пользовательского класса.DateTimePicker имеет собственный формат, установленный на dd.MM.yyyy HH:mm:ss.Вот что я пробовал и проблемы с этими попытками:

  • Я сделал привязку к свойству DateTimePicker Value .Свойство моего пользовательского класса содержит действительную дату.Когда я запускаю приложение, я получаю ArgumentOutOfRangeException, заявляя, что «01.01.0001 00:00:00» не является допустимым значением для значения, и оно должно быть между MinDate и MaxDate.( Но я не могу установить ни DateTime.MaxValue, ни DateTime.MinValue для свойства value! )
  • Я сделал привязку к Text свойству DateTimePicker.Все работает хорошо, , но секунды всегда отображаются как "00".Я могу ввести разные значения, и они будут отражены в связанном свойстве моего пользовательского класса!

Любые идеи?

Редактировать Вот фрагмент кода изфайл конструктора:

this.dateTimePickerTimestampFrom.CustomFormat = "dd.MM.yyyy HH:mm:ss";
this.dateTimePickerTimestampFrom.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.bindingSourceSelectLogEntries, "DateFrom", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.dateTimePickerTimestampFrom.Enabled = false;
this.dateTimePickerTimestampFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dateTimePickerTimestampFrom.Location = new System.Drawing.Point(81, 42);
this.dateTimePickerTimestampFrom.Name = "dateTimePickerTimestampFrom";
this.dateTimePickerTimestampFrom.Size = new System.Drawing.Size(147, 20);
this.dateTimePickerTimestampFrom.TabIndex = 3;

Edit 2 bindingsource - это пользовательский класс, содержащий несколько свойств.Значения действительны на момент установления привязки.Я установил его в следующем коде:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    // Exception is thrown at the following line.
    // controller is an instance of my custom class containing valid values.
    bindingSourceSelectLogEntries.DataSource = controller; 
}

Ответы [ 2 ]

1 голос
/ 15 мая 2013

Просто К вашему сведению NULL - это не проблема, так как значение, представляющее NULL.

Существует несоответствие со значениями по умолчанию в рамках, которые многие (включая меня) пропускают большую частьвремя.

До недавнего времени и в некоторых случаях даже сейчас, в MSSQL и большинстве других БД представлением по умолчанию для значений NULL в полях DateTime было значение даты "1900-01-01".Теперь оно было изменено на "01/01/0001" Позже также значение DateTime.MinValue в MS Visual Studio Framework.

Однако, элемент управления datePicker не распознает это значение как действительную дату, потому что стандарт DatePickerуправление в VS имеет minDate = '01/01/1758'.и существует проблема, которая вызывает приведенное выше условие ошибки.

Вы получаете совершенно правильное представление поля NULL из вашей БД, которое находится за пределами допустимого диапазона элемента управления DatePicker.

1 голос
/ 07 декабря 2011

Я нашел решение самостоятельно и хотел бы сказать, чтобы другие не тратили так много времени на ту же проблему, как я.

Мой дизайн состоит из формы и контроллера (содержащегоданные представить).В форме я хотел сделать все в конструкторе, чтобы минимизировать код позади.Таким образом, у меня был источник привязки в форме, экземпляр моего контроллера в качестве источника данных.ReflectorPro помог мне выяснить, что CurrencyManager был задействован, потому что BindingSource рассматривался как список.Поэтому все значения всех связанных элементов управления были установлены в ноль до получения значений от контроллера.DateTimePicker не любит null как значение для своего свойства Value и выдает исключение.

Теперь я сделал привязку вручную в коде и все работает, как я ожидал.

...