2013. 12. 5. 18:07

조금 특이한 케이스를 잡아서 소개합니다.

데이터셋과 콤보박스가 연결된 상태에서 발생하는 문제입니다.


해당 문제를 재현한 프로그램 

환경 : C#.NET 1.0 WinForm

상황 : ComboBox 컨트롤의 값을 코딩으로 변경하였는데 변경된 값이 실제로 반영되지 않는 문제.


WindowsApplication2.rar

(실행파일 & 소스 포함, C#. Net 1.0, VS .NET 2003 에서 컴파일 되었습니다.)



[[ 문제 상황 ]]

1. 콤보박스(ComboBox) 목록 등록

콤보박스(ComboBox)의 목록은 ValueMember, DisplayMember 속성을 테이블의 컬럼으로 지정 후, DataSource 속성에 테이블을 지정하는 방법으로 한다.


2. 실제 코드값(데이터)를 가져온 데이터셋이 필요


3. DataBingings 속성으로 2의 실제 코드값을 바인딩 처리


4. 코드상에서 콤보박스 값을 변경 후 데이터셋 값 확인



여기서 콤보박스의 SelectedValue 속성을 통해 값을 변경 하면, 화면에는 바뀐 값이 표시되나, 실제 데이터셋의 값은 처음 가져온 상태 그대로 변동이 없으므로 주의가 필요합니다.


1. 마우스로 콤보박스를 직접 선택하여 값을 변경하게 되면 변경된 값이 2항에 데이터셋에도 같이 변경되어집니다.

    마우스로 직접 건드리는 경우에는 데이터셋의 값이 함께 변경되어 지는 것을 확인 할 수 있습니다.

2. 마찬가지로 데이터셋을 직접 건드리면 바뀐 값이 콤보박스에도 그대로 반영됩니다.

3. 마우스로 직접 건들고 난 이후에는 데이터셋을 변경 하여도 콤보박스의 값이 바뀌어 지지 않습니다. 


즉, 데이터바인딩 된 개체의 값을 소스로 핸들링 시 컨트롤을 건들지 말고, 바인딩된 해당 데이터셋의 값을 고쳐야 한다는 것

(왜 그런지에 대한 이유는 모르겠습니다. 어쨋든 되는 방향 찾았으니 그걸로 또 하나의 삽질을 끝냅니다.)



혹, 원인 이라던가 좀 자세한 내용을 알고 계신분은 한수 가르쳐 주시면 감사하겠습니다 (__)



[2013/12/06]

정정합니다.

.Net 1.0 이 아닌 환경에서는 해당 문제가 발생하지 않는 것으로 보아 프레임워크 버그인듯 합니다.

.Net 4.5 Framework 만 설치된 컴퓨터에서 프로그램 실행시 증상이 나타나지 않는 것을 확인하였습니다.



Posted by 해비