2012-11-07 3 views
2

DataGridViewColumnDataGridView이 있습니다. 열에서 제 3 자 구성 요소를 호스팅하고 있습니다. 셀에 편집 모드로 들어가 값을 수정 한 다음 Enter 키를 눌러 값의 유효성을 검사합니다. 문제는 값을 확인하기 위해 Enter 키를 두 번 눌러야한다는 것입니다. 첫 번째 키 입력은 셀에 호스팅 된 타사 편집자의 값을 확인하는 것이고 두 번째 셀은 DataGridView의 셀을 확인하는 것입니다 ... 셀의 값을 확인하려면 한 번만 Enter 키를 누르십시오.맞춤 datagridviewCell에서 셀의 값을 확인하십시오.

또한 이상한 동작을 보았습니다. 예를 들어, DataGridView의 행은 DataGridView의 셀의 나머지 부분으로 동작하지 않습니다. 마지막 행의 경우 셀의 값을 편집 한 다음 Enter 키를 눌러 값의 유효성을 검사 한 후 항상 동일한 셀에 있고 편집 모드에서 셀 값이 선택되면 사용자가 셀 값이 유효하지 않다고 생각할 수 있습니다. 사실 그것은 아닙니다. 이것은 행의 나머지 부분에서 발생하지 않습니다. 유효성을 검사하려면 Enter 키를 두 번 눌러야하고 유효성 검사 후 셀은 편집 모드로 남아 있지 않아야합니다. 키를 두 번 Enter 키를 누릅니다의 필요성에 대해서는 :

편집 을 사용자 정의 셀에, 키가 처음으로 누르면 입력 할 때, 그것은이있는 셀에 대한 값이 변경라는 이벤트를 발생 이 경우, OnSourceValueChanged (이 값이 변경 타사에 대해 제기 된 사건이다) 그래서에 내가 할 :

: 그것은 코드가있는 DataGridView에 CurrentCellDirtyStateChanged을 제기 NotifyCurrentCellDirty

 this.valueChanged = true; 
     this.EditingControlDataGridView.NotifyCurrentCellDirty(true); 
     base.OnSourceValueChanged(e); 

실행될 때

그 후에 datagridview에 대해 DataError 이벤트가 발생하지만 값을 적용하고 편집 모드를 종료하려면 편집 모드에서 셀이 계속됩니다. 이 작업을 수행하는 방법? 또한 나는 시도했다 :

this.dataGridView.CurrentCell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit); 

this.dataGridView.EndEdit (DataGridViewDataErrorContexts.Commit);

DataError 처리기에서 작동하지만 작동하지 않습니다.

마지막으로 cellvaluechanged가 셀의 호스트 된 컨트롤 일 가능성이 있습니다. 셀의 변경 내용을 확인하고 유효성을 검사하기 위해 Enter 키를 두 번 눌러야하는 이유를 이해할 수 없습니다. 세포. Enter 키를 한 번만 누르면됩니다.

원인은 CurrentCellDirtyStateChanged에서 커밋 한 후에 오류가 발생했을 가능성이 있습니다. 커밋 오류를보고하는 DataError 이벤트가 발생했습니다. 또한 커밋 오류를 방지하는 방법? 무슨 일 이니?

+0

셀 값 변경 이벤트의 SendEnter 키가 한 가지 방법입니다. 괜찮을까요? – Sami

답변

0

CellValueChanged 이벤트에서 셀 유효성 검사 논리를 구현할 수 있습니다. 이 이벤트는 셀 값이 편집되면 트리거됩니다.

+0

Enter 키를 누른 다음 키를 입력하면 현재 셀의 값이 프로그래밍 방식으로 유효성을 검사 할 때 어떻게 처리 할 수 ​​있습니까? 아마도 KeyPress 이벤트가 있을까요? 왜 마지막 행에서 셀의 유효성을 확인한 후에도 항상 같은 셀에 남아 있습니까? – user1624552

+0

Enter 키를 누를 때마다이 CellValueChanged 이벤트가 호출됩니다. – Vasanthan

+0

제발, 내 편집 게시물을 참조하십시오. 나는 무엇이 일어나고 있는지 자세히 설명한다. – user1624552

관련 문제