2011-02-17 12 views
1

저는 DataGridView가 7 개의 셀을 가지고 있습니다. 모든 셀에 내가 누를 경우 현재 행이 제거됩니다. thou 이벤트는 아무 문제없이 이름이 Public Event EscapeOnFirstRowPressed이고 각 컨트롤을 가져옵니다. 초기 상태. 모든 세포가 SQL 테이블에 데이터를 쓰기 DataGridView에서 행을 제거하십시오.

  • 는 현재 행을 제거

    • 다음 충족하는 경우

      이 프로세스의 일반적인 생각은, 그래서 사용자는 새로운 데이터를 가져올 준비가되었습니다 .

    쓰기 절차가 정상이므로 행을 제거하겠습니다.

    나는이 동작이 RowValidated sub 또는 CellEnter (현재 행을 떠나 다음 행을 가져올 때 발생 함)에서 호출해야한다고 말합니다. 그러나 어느 곳에서 나는 다음과 같은 오류

    DGV.Rows.RemoveAt(0) {"Operation cannot be performed in this event handler."} 
    

    나는이 작업에 다른 프로세스를 시도했다에게받은 명령

    If Not DGV.CurrentCell.EditedFormattedValue = "" Then 
          If Not DGV.Rows(RowIndex).IsNewRow Then 
           DGV.Rows.RemoveAt(RowIndex) 
           DGV.Refresh() 
          End If 
    
         ElseIf DGV.CurrentCell.EditedFormattedValue = Nothing Then 
          If Not DGV.Rows(RowIndex).IsNewRow Then 
           DGV.Rows.RemoveAt(RowIndex) 
           DGV.Refresh() 
          End If 
         End If 
    

    을 넣어합니다. 나는 다음과 같은 명령을

    Dim myKeyData As System.Windows.Forms.Keys 
    Dim myMsg As System.Windows.Forms.Message 
        myKeyData = Keys.Escape 
    ProcessCmdKey(myMsg, myKeyData) 
    

    을 제공하여 키 누르기 동작을 시뮬레이션하려고하지만 포인터가 나는 Esc 키를 누르면 실행 같은 명령을 실행 할 때 나는 같은 오류가 발생합니다.

  • 답변

    1

    이벤트 처리기가 완료된 후 BeginInvoke을 호출하여 다음 메시지 루프에서 코드를 실행할 수 있습니다.

    +0

    관심을 가져 주셔서 감사드립니다. 내가 그걸 할 때? CellValidated의 끝에서? 또는 RowValidated 후에? 그리고 BeginInvocke를 사용하는 방법에 대해 제게 도움을 주시겠습니까? 왜냐하면 나는 그것을하려고했으나 어떤 긍정적 인 결과도 낼 수 없었습니다. –

    +0

    'BeginInvoke'를 호출하고 행을 삭제하는 델리게이트를 전달합니다. – SLaks

    +0

    당신은 타운에서 최고입니다, 성공적으로 내 문제를 해결했습니다. 나는 당신에게 더 많은 표를 줄 수있는 능력을 갖고 싶습니다. 다시 한 번 감사드립니다. –

    관련 문제