2011-12-07 2 views
2

DateTimePicker에 재미있는 (?!?) 문제가 있습니다. 누군가 나를 도와 줄 수 있기를 바랍니다. DateTimePicker가있는 폼이 있는데이를 사용자 정의 클래스의 속성에 바인딩하려고합니다. DateTimePicker의 사용자 지정 형식은 dd.MM.yyyy HH:mm:ss입니다. DateTimePicker의 재미있는 문제

  • 가 내가있는 DateTimePicker의 속성에 바인딩 만든 : 여기에 내가 시도하고 이러한 시도로 문제가 것입니다. 내 사용자 정의 클래스의 속성에는 유효한 날짜가 들어 있습니다. 내가 응용 프로그램을 실행할 때 "01.01.0001 00:00:00"이 값의 유효한 값이 아니며 MinDate와 MaxDate 사이에 있어야한다는 ArgumentOutOfRangeException이 발생합니다. (나는 값 속성에 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; 

편집 : 여기에 편집

디자이너 파일의 밖으로 코드입니다. 값은 Y 인딩이 설정된 순간에 유효합니다. 다음 코드에서 설정 :

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 스튜디오 버전? – dknaack

답변

1

은 나 자신에 의해 해결책을 발견하고 내가 그랬던 것처럼 다른 사람들이 같은 문제에 너무 많은 시간을 할애되지 않을 수도 있습니다 나는 이야기하고 싶습니다.

내 디자인은 양식과 컨트롤러 (제시 할 데이터 포함)로 구성됩니다. 양식에서 나는 코드를 최소화하기 위해 디자이너에서 모든 것을하고 싶었습니다. 그래서 폼에 바인딩 소스가 있고, 데이터 소스로 컨트롤러의 인스턴스가 있습니다. ReflectorPro를 사용하면 BindingSource가 목록으로 처리되었으므로 CurrencyManager가 관련되었음을 알 수있었습니다. 따라서 모든 바인드 된 컨트롤의 모든 값은 컨트롤러에서 값을 가져 오기 전에 null로 설정되었습니다. DateTimePicker는 Value 속성의 값으로 null을 좋아하지 않으며 예외를 throw합니다.

지금 코드 바인딩에서 수동으로 바인딩을했는데 예상대로 모든 것이 작동합니다.

+0

다행이라고 생각해.) 디자이너를 최대한 자주 사용하고 싶지만 때로는 까다로울 수 있습니다. – Otiel

1

FYI NULL은 NULL을 나타내는 값만큼이나 중요하지 않습니다.

프레임 워크의 기본값과 불일치가있어 많은 사람들이 (대부분 자신을 포함하여) 대부분의 시간을 놓친다.

MSSQL 및 대부분의 다른 DB에서 DateTime 필드의 NULL 값에 대한 기본 표현은 "1900-01-01"의 날짜 값이었습니다. 이제는 "01/01/0001" 으로 변경되었습니다. 나중에 MS Visual Studio 프레임 워크에서 DateTime.MinValue의 값입니다.

그러나 VS에서 DatePicker 표준 컨트롤에 minDate = '01/01/1758'이 있으므로 datePicker 컨트롤은이 값을 유효한 날짜로 인식하지 못합니다. 위의 오류 조건을 트리거하는 문제가 있습니다.

DatePicker 컨트롤의 허용 범위를 벗어나는 DB에서 필드를 완벽하게 나타내는 NULL이 표시됩니다.