2012-08-03 2 views
1

현재 this.EndInvoke(this.BeginInvoke(new MethodInvoker(this.resortRows)));을 사용하여 빈 셀을 확인한 다음 DGV를 정렬하는 메서드를 호출합니다. 하지만 CellEndEdit에서 이것을 호출합니다. 이벤트가 입력하거나 탭을 눌러 호출되는 경우C# DataGridView - CellEndEdit 이벤트에서 호출 정렬

모든 것이 잘 작동하지만 내가 다른 셀을 클릭하면 여전히 한 EditMode에서 나는 일종의 명령 줄에 오류가 발생하면서 :

Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function. 

이가 정렬 명령을

private void dataGridView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    this.dataGridView1.EndEdit(); 
} 
:

this.dataGridView1.Sort(this.dataGridView1.Columns[2], ListSortDirection.Ascending); 

나는이 같은 MouseClick 이벤트를 hande 시도

그러나 회색 영역 (아무 셀이나 헤더에도 없음)에서 DGV 내부를 클릭하는 경우에만 작동합니다. 어떻게 해결할 수 있습니까?

답변

1

실제로 코드를 시도한 결과 문제가 EndInvoke 인 것으로 보입니다.
그냥 제거 (예 : BeginInvoke 만 사용)하면 정상적으로 작동합니다.

편집 : 호출 된 메소드가 바로 뒤에 CellEndEdit 핸들러 종료 실행됩니다BeginInvoke를 사용

EndInvoke없이.

각 정렬 후에 코드를 호출해야하는 경우 호출 된 메서드의 끝에 코드를 넣으면됩니다.

+0

이것은 내 수업의 절반을 다시 작성해야한다는 것을 의미합니다. : 모든 것을 다시 말하십시오 – Qsiris

+0

이것은 자동으로 정렬되지 않습니다. 정렬 방향을 나타내는 작은 삼각형이 표시됩니다. – Qsiris

+0

이상하게도 효과가 있습니다 ... 하나의 셀을 편집하자마자 열이 자동으로 정렬됩니다. – digEmAll

관련 문제