2013-08-08 4 views
0

내 프로젝트에는 사용자가 편집하여 DB에 저장할 수있는 DataGridView가 있습니다. DataGridView에 유효성 검사를 추가하려고합니다. 특정 열은 필수이며 숫자 (특히 double) 일 수 있습니다.datagridview 자동 구문 분석 사용 안 함

.Net 뒷쪽에서 .Net이 수행하는 자동화 된 구문 분석과 관련하여 작업하는 데 문제가 있습니다. DataGridView의 동작은 사용자가 필수 입력란을 비워 두거나 이중으로 (즉, 텍스트로) 파싱 할 수없는 항목을 입력하는지 여부에 따라 다릅니다.

쉬운 사례 : 사용자가 필수 입력란을 비워두고 저장을 클릭하는 경우. 저장 버튼의 클릭 이벤트가 발생하고 셀의 값 속성이 DBNull으로 설정되어 있는지 확인할 수 있습니다.이 경우 셀의 ErrorText 속성을 설정하고 MessageBox을 표시합니다.

하드너 케이스 : 사용자가 double (예 : "asdf")으로 구문 분석 할 수없는 텍스트를 입력 할 때. 이런 일이 생기면 셀이 포커스를 잃자 마자 뒤에서 일부 .Net 유효성 검사가 발생하고 스택 추적을 표시하는 메시지 상자가 나타납니다. 이 유효성 검사를 완전히 비활성화하고 사용자가 저장을 클릭 할 때 내 유효성 검사 만 수행하려고합니다.

(그 시점까지는 유효하지 않은 데이터는 중요하지 않습니다.) 누구든지이 작업을 수행하는 방법을 알고 있습니까?

답변

0

아래 코드를 사용하여 유효성을 취소 할 수 있습니다. 테스트하지는 않았지만 DataGridViews CausesValidation 속성을 false로 설정하면 동일한 효과가 발생할 수 있습니다.

Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating 
    e.Cancel = True 
End Sub 
+0

이러한 옵션 중 어느 것도 작동하지 않았습니다. CausesValidation = false 설정이 아무 효과가없는 것처럼 보였습니다. 이벤트 취소는 셀 값을 커밋하지 못했음을 의미하므로 제안한 CellValidating 핸들러를 사용하면 form_load에 오류 메시지 상자가 나타납니다 (그리드가 채워진 경우). – user2410449

0

SQL 쿼리를 편집하여 플로트를 nvarchars로 변환하여 문제를 해결할 수있었습니다. 이제 DataGridView는 데이터 유형이 텍스트라고 생각합니다. 어떤 종류의 기본 논리로도 유효성을 검사 할 수 없습니다. 또한 사용자가 엔터를 치지 않으면 값이 커밋되지 않아 Value 대신 셀의 EditedFormattedValue 속성에 대한 유효성 검사를 수행합니다.

관련 문제