윈폼에서 폼의 모든 컨트롤의 데이타바인딩 제거하는 방법.

//익셉션 발생
dataTable.Rows[0].Delete();

public void clearAllBindings(){
 CurrencyManager cm = this.BindingContext[dataTable] as CurrencyManager;
 cm.Bindings.Cast<Binding>().ToList().ForEach(b => b.Control.DataBindings.Clear());
}

//괜찮음.
dataTable.Rows[0].Delete();

윈폼에서 DataSource로 데이타테이블을 사용하는데, 현재 컨트롤들에 바인딩된 행이 만약 지워지면, 컨트롤의 DataBinding 에서 에러를 뿜는다. 컨트롤에서야 당연히 DataSource가 유효할 것으로 생각하는데, 현재 행이 지워져버렸기 때문. 따라서 컨트롤에서 사용 중인 행을 꼭 지워야 하는 상황이라면, 미리 모든 바인딩을 삭제해야 한다. 해당 컨트롤 별로 컨트롤.DataBindings.Clear()를 호출할 수도 있으나, 위의 코드가 더 깔끔.

물론 각 컨트롤의 DataBinding에서 소스를 읽을 때 처리해줘도 된다. 찾아보길.

댓글

이 블로그의 인기 게시물

Oracle NLS_DATE_FORMAT 변경

Stop console process using Ctrl+C.

Alternative to IValueConvert, QuickConverter