DataGridViewColumn
인 DataGridView
이 있습니다. 열에서 제 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 이벤트가 발생했습니다. 또한 커밋 오류를 방지하는 방법? 무슨 일 이니?
셀 값 변경 이벤트의 SendEnter 키가 한 가지 방법입니다. 괜찮을까요? – Sami