2009-10-27 9 views
4

DataGridView에 문제가 있습니다. 항목 중 하나를 삭제하고 표를 다시로드하려고 할 때 격자에 연결된 3 개의 항목 모음이 있습니다..Net DataGridView "인덱스 0에 값이 없습니다."

열린 대화 상자에서

If (dlg.ShowDialog() = DialogResult.OK) Then 
    'Show dialog with grid on it 
End If 

의 코드가있는 경우, 내가 (다시, 컬렉션에서 항목을 삭제하고, 그리드를 다시로드해야합니다) 그리드에서 항목을 삭제하고,

의 오류가있는 "만약 (dlg.show ..."라인에 반환, "유형 'System.IndexOutOfRangeException'의 첫째 예외가

추가 정보가 system.windows.forms.dll에서 발생 : 색인 2에 값이 없습니다. "

내가, 내가 어떤 세포에 액세스하려고 한 경우이 오류를 이해 열을 행하거나,하지만 메신저 수

(I 공용 언어 런타임 오류에 대해 설정 디버거에 침입가) 다음 나는 예외를 기대 "If (dlg.ShowDialog() ..."행이 아니라이 격자 데이터에 액세스하려고하는 코드 행을 멈추는 것

아이디어가 있습니까? 건배

답변

8

내가 발견 한 당신은

DataGridView.DataSource = MyCollection 

그것은 마법처럼 작동합니다 (제거 삭제 된 항목 포함) 컬렉션에 그리드를 재설정하기 전에

DataGridView.DataSource = Nothing 
DataGridView.Refresh() 

에 추가합니다. 왜 이렇게해야하는지에 관심이 있습니다.

+0

새로 고침이 필요하지 않아 잠재적으로 작업 속도가 느려집니다. – ceztko

0

모달 대화 상자를 표시하므로 던져진 오류가 표시 될 수 있습니다. 그리드/콜렉션에서 삭제를 실제로 수행하는 코드 줄에 중단 점을 설정하여 오류가 발생했는지 확인하려고 했습니까?

+0

Ive가 중단 점을 설정하고 삭제 메소드를 통과하면 컬렉션에서 항목을 제거하고 그리드의 데이터 소스를 문제없이 다시 바인딩합니다. 오류가 발생하는 지점은 메뉴 항목 클릭 이벤트 (ctxMenuDelete.Click)를 처리하는 메서드의 "End Sub"에 있으며 여기에서 부모의 "If (dlg.ShowDialog() ..."로 돌아갑니다. 양식을 새로 고칩니다. – Ben

관련 문제