2011-12-07 29 views
2

私はDateTimePickerのといくつかの面白い(?!?)の問題を持っているし、うまくいけば、誰かが私を助けることができます。私はそれにDateTimePickerとフォームを持って、私はそれをカスタムクラスのプロパティにバインドしたい。 DateTimePickerのカスタムフォーマットはdd.MM.yyyy HH:mm:ssに設定されています。ここで私が試したもので、それらの試みとのトラブル:DateTimePickerの面白い問題が

  • 私はDateTimePickerののプロパティへの結合を行いました。私のカスタムクラスのプロパティには有効な日付が含まれています。私がアプリケーションを実行すると、 "01.01.0001 00:00:00"が値の有効な値ではなく、MinDateとMaxDateの間でなければならないというArgumentOutOfRangeExceptionが出ます。 (しかし、私はvalueプロパティにDateTime.MaxValueもDateTime.MinValueどちらを設定することはできません!
  • 私はDateTimePickerののテキストプロパティへの結合を行いました。すべてが正常に実行されていますが、ですが、秒は常に「00」と表示されます。私は異なる値を入力することができ、それらは私のカスタムクラスのバインドされたプロパティに反映されます!

BindingSourceプロパティのカップルを含むカスタムクラスで2

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; 

編集:ここでは編集

は、デザイナーのファイルのうちコードスニペットです。値は、バインディングが設定された時点で有効です。私は、次のコードでそれを設定します。

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; 
} 
+1

関連(参考):http://stackoverflow.com/questions/8359380/datetimepicker-and-secondsコードを貼り付けることはできますか?たぶん、あなたはあなたが見ていなかった "ダム"の間違いをしました。 – Otiel

+0

@Otiel:デザイナーのプロパティシートにすべてのバインディングと設定を行いました。私は関連する行を投稿します。 – Fischermaen

+0

あなたが使っている.NETとVisual Studioのバージョンは? – dknaack

答えて

1

私が自分で解決策を発見し、私が行ったように他の人が同じ問題に多くの時間を費やすないかもしれないので、私は、お伝えしたいと思います。

私の設計は、フォームと、コントローラ(提示するデータを含む)から成ります。フォームでは、コードを最小限に抑えるためにデザイナーですべてをやりたかったのです。だから私は、データソースとして私のコントローラのインスタンスを持って、フォーム上のバインディングソースを持っていた。 ReflectorProは、BindingSourceがリストとして扱われたため、CurrencyManagerが関与していることを知りました。したがって、バインドされたすべてのコントロールのすべての値は、コントローラから値を取得する前にnullに設定されていました。 DateTimePickerは、Valueプロパティの値としてnullを好きではなく、例外をスローします。

今、私は背後にあるコードで手動で結合し、すべてのものでした私は期待通りに動作します。

+0

あなたはそれを整理してくれてうれしいです;)デザイナーをできるだけ頻繁に使用するのが好きですが、時には面倒かもしれません。 – Otiel

1

だけFYI NULLはNULLを表す値が何であるかな限りここでの問題ではありません。

多く(私自身を含めて)枠組みの中でデフォルト値とのミスマッチがありますが、ほとんどの時間を欠場します。

MSSQLとその他ほとんどのDBでは、DateTimeフィールドのNULL値のデフォルト表現は"1900-01-01"でした。 は、今ではその後も、MS Visual StudioのフレームワークでDateTime.MinValueの値である"01/01/0001" に変更されました。

VSにおける標準DatePickerコントロールがminDate = '01/01/1758'を持っているのでしかし、datePicker制御が有効な日付としてこの値を認識しません。 と上記のエラー条件を引き起こす問題があります。

DatePickerコントロールの許容範囲外のDBから完全に有効なNULLフィールド表現が取得されています。

関連する問題