DateTimePicker ist lustig Fragen
Habe ich ein paar lustige (?!?) Probleme mit dem DateTimePicker und ich hoffe jemand kann mir helfen. Ich habe ein Formular mit einem DateTimePicker auf es und ich will es zu binden, um eine Eigenschaft einer benutzerdefinierten Klasse. DateTimePicker hat ein benutzerdefiniertes format eingestellt dd.MM.yyyy HH:mm:ss
. Hier ist, was ich versucht haben, und die Schwierigkeiten, mit denen versucht:
- Machte ich eine Bindung an die Wert - Eigenschaft des DateTimePicker. Die Eigenschaft meiner benutzerdefinierten Klasse enthält ein gültiges Datum ist. Wenn ich die app starte, bekomme ich eine ArgumentOutOfRangeException, die besagt, dass "01.01.0001 00:00:00" ist kein Gültiger Wert für Wert, und es sollte zwischen MinDate und MaxDate. (Aber ich kann nicht einstellen, weder DateTime.MaxValue noch DateTime.MinValue-der value-Eigenschaft!)
- Machte ich eine Bindung an die Text - Eigenschaft des DateTimePicker. Alles läuft gut, aber die Sekunden werden immer als "00". Kann ich verschiedene Werte eingeben und Sie spiegeln sich auf die gebundene Eigenschaft meiner benutzerdefinierten Klasse!
Irgendwelche Ideen?
Bearbeiten
Hier ist der Codeausschnitt aus der designer-Datei:
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
Die bindingsource ist eine benutzerdefinierte Klasse mit ein paar Eigenschaften. Die Werte sind gültig im moment der Bindung eingestellt ist. Ich habe es in dem folgenden code:
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;
}
- Bezug (Referenz): stackoverflow.com/questions/8359380/datetimepicker-and-seconds. Können Sie fügen Sie einige code? Vielleicht hast du eine "dumme" Fehler, dass Sie nicht sehen.
- Ich habe alle Bindungen und Einstellungen im Eigenschaftenfenster des Designers. Ich poste die relevanten Zeilen.
- Wich .net und visual studio-version verwendest du ?
- Ich benutze VisualStudio 2010 SP1 und das target framework ".NET Framework 4". (Nicht das client-Profil)
- Das minimale Datum und Zeit ausgewählt werden können in der Steuerung ist '1/1/1753 00:00:00'. Sie können versuchen, '01.01.0001 00:00:00', sondern Steuern durch Standard-änderungen Mindest-Datum zu '1/1/1753 00:00:00'
- ich versuchte Ihren code, und es funktioniert gut für mich. Das ist seltsam.
- und dknaack: in der Tat, das ist seltsam...
- Nur um zu klären: was ist Ihre verbindliche Quelle? sind Sie sicher, dass es DateTimes und Sekunden?
- Siehe "Edit 2" von meiner Frage, ich habe die Informationen, die Sie angefordert haben.
- IMHO steuert mindate eingestellt ist seltsam, 1753, weil der SQL mindate. Lesen Sie hier für weitere Informationen über mindates.
- Das Bearbeiten nicht wirklich helfen Sie mir, es ändert nur meine Frage nach "sind Sie sicher, dass
controller
hat DateTimes mit Sekunden?" - Oh sorry, ich dachte, ich war klar genug, als ich sagte, "es enthält gültige Werte". Nur clearify, der controller enthält ein gültiges Datum mit einer Zeit Teil, Sekunden unterscheidet sich von "00".
- Ein Hinweis darauf, dass für alle Fachleute: Die Ausnahme wird ausgelöst, bevor die gebundene Eigenschaft des benutzerdefinierten Klasse controller ist angefordert!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Lösung von mir und ich möchte sagen, so dass andere können nicht verbringen so viel Zeit auf das gleiche problem wie ich.
Mein design besteht aus einem Formular und einem controller (mit den Daten zu präsentieren). In der form wollte ich alles tun, um in den designer zu minimieren, den code hinter. So hatte ich eine verbindliche Quelle auf dem Formular, dass eine Instanz meines Controllers als DataSource. ReflectorPro hat mir geholfen, um herauszufinden, dass die CurrencyManager beteiligt war, da die BindingSource behandelt wurde, als eine Liste. Daher sind alle Werte aller gebundenen Steuerelemente wurden auf null gesetzt, bevor Sie die Werte aus der Steuerung. DateTimePicker wie nicht null als Wert für die Eigenschaft Value und wirft die Ausnahme.
Nun hatte ich die Bindung manuell im code hinter, und alles funktioniert wie ich es erwartet habe.
Nur ein FYI
NULL
ist nicht ein Problem hier so viel wie, was der Wert, der NULL ist.Es gibt eine Diskrepanz mit den Vorgaben innerhalb des Rahmens, dass viele (einschließlich mir) die meiste Zeit verpassen.
Bis vor kurzem, und in einigen Fällen sogar jetzt, in MSSQL und die meisten anderen DB die Standard-Repräsentation für NULL-Werte in DateTime-Felder Datum Wert
"1900-01-01"
.Nun es wurde geändert, um
"01/01/0001"
Später ist auch der Wert des
DateTime.MinValue
im MS visual studio-framework.Jedoch die
datePicker
Kontrolle nicht erkennen diesen Wert als gültiges Datum, weil standardDatePicker
Kontrolle in VS hatminDate = '01/01/1758'
.und es gibt das Problem, das löst den Fehler oben.
Erhalten Sie eine perfekt gültige
NULL
Feld-Darstellung aus deiner DB, die außerhalb des zulässigen Bereichs derDatePicker
Kontrolle.