2010-07-14 1 views
2

이 항목을 피하는 많은 게시물을 발견했지만 실제로이 사례를 해결하지 못했습니다. 어떤 국가는 선택하지SelectedItem이 null 인 경우 Winforms ComboBox에 대한 개체 바인딩이 실패합니다.

this._stateComboBox.DataSource = ((Address)this._addressBindingSource.DataSource).States; 
this._stateComboBox.DisplayMember = "Abbreviation"; 
this._stateComboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedItem", this._addressBindingSource, "State")); 

처음에는 콤보 상자가 표시 빈과 같이

나는 국가가 약자와 이름 속성을 가진 비즈니스 오브젝트 인 List<State>에 바인딩 된 콤보 상자를 보유하고 있습니다. 콤보에 I 탭 밖으로 탭으로하려고하면 selectedItem가가 null,하지만 예외가 :

Object of type 'System.DBNull' cannot be converted to type 'State'.

BindingSource에이 널 (null)의 selectedItem을 복용하고 그것을 만드는 것으로 보인다 왜 어떤 생각 System.DBNull Address.State 속성에 할당하려고하기 전에? 이 예외는 내 State setter가 호출되기 전에 OnValidating에서 발생합니다. 디버거가 없으면 포커스가 ComboBox에서 멈추는 것처럼 보입니다.

비어있는 약어와 이름을 사용하여 데이터 소스에 빈 상태 개체를 추가하고 싶지 않습니다. 이 문제를 해결하려면 어떻게해야합니까?

답변

3

컨트롤 유효성 검사가 Binding 클래스의 기본값이기 때문입니다. Binding.DataSourceUpdateMode 속성을 DataSourceUpdateMode.OnPropertyChanged로 변경하여 사용자가 콤보 상자 선택을 변경할 때만 값이 할당되도록 할 수 있습니다.

+0

나를 위해 잘 작동하지 않았습니다; 그러나 그것은 나에게 해결 방법으로 나를 이끌 힌트를주지 않았다 : 지금은 바인딩 개체를 만들 때 DataSourceNullValue = null을 설정하려고합니다. 이렇게하면 예외를 무시할 수 있지만 불행히도 null 값을 커밋 할 수는 없습니다. 즉, 컨트롤의 표시된 값을 지우면 Null로 바인딩 된 개체 속성을 설정하는 대신 유효성 검사 중에 바인딩되지 않은 속성 값이 바인딩 된 개체에서 검색됩니다. – Hadster

+0

나는이 게시물을 찾을 때까지 이걸로 몇 시간 동안 고생했다. 감사! –

+0

이것은 해결책이 될 수 있지만 실제 질문에 대한 답변을 궁금합니다. null이 DBNull로 변환되는 이유는 무엇이며, 더 중요한 것은 이러한 일이 발생하지 않도록하는 방법입니다. –