2013-05-30 4 views
0

범위를 벗어납니다.아래 코드를 실행하려고하면 코드 참조를 통해 오류가 발생하면서 해당 참조가 모두 범위를 벗어나기 전에 'cboUltra'개체에 대한 System.IDisposable.Dispose를 호출하면

// 코드

For Each UltraGridRow In transactionFieldsGrid.Rows.GetAllNonGroupByRows() 
     If (Field.FieldTypeId = 1000) Then 
     Dim cboUltra = New UltraCombo() 
     cboUltra.DataSource = LoadLookupMulticolumn(Field.LookUpCode) 
     UltraGridRow.Cells("FieldValue").ValueList = cboUltra 
     EndIf 
Next 

// 오류

CA2000 폐기 객체 방법 'TransactionFieldsController.LoadTransactionFieldsGrid (UltraGridBase, 컬렉션 (TransactionField의), WorkflowsController, 부울)'범위를 잃기 전에, 객체 ' cboUltra '는 모든 예외 경로를 따라 배치되지 않습니다. 모든 참조가 범위를 벗어나기 전에 'cboUltra'개체에 대해 System.IDisposable.Dispose를 호출하십시오. 나는 위의 코드처럼 시도 할 때

 For Each UltraGridRow In transactionFieldsGrid.Rows.GetAllNonGroupByRows() 
      If (Field.FieldTypeId = 1000) Then 
       Using cboUltra As New UltraCombo() 
       cboUltra.DataSource = LoadLookupMulticolumn(Field.LookUpCode) 
       UltraGridRow.Cells("FieldValue").ValueList = cboUltra 
      End Using 
      EndIf 
    Next 

그러나 :

코드로 재 작성이 난을 극복하기 위해. 아래 줄이 실행되면 Object reference error이 표시됩니다.

transactionFieldsGrid.ActiveRow = transactionFieldsGrid.Rows.GetRowAtVisibleIndex(0) 

참고 : 그리드 및 행 값이 포함되어 있습니다.

모든 솔루션?

답변

1

그리드에 UltraCombo에 대한 참조가 있기 때문에이 경우 메서드에서 UltraCombo 인스턴스를 삭제할 수 없습니다. 작성중인 UltraCombo를 폐기하려면 양식으로 범위가 지정된 콜렉션에 해당 UltraCombo를 저장하고 양식이 폐기 될 때 폐기해야합니다. 그리드가 아직 콤보에 액세스해야하기 때문에 메서드가 너무 일찍 필요하기 때문에이 작업이 필요합니다.

그리드에서 여러 개의 드롭 다운에 대해 동일한 데이터를 사용해야하는 경우 해당 드롭 다운의 한 인스턴스 만 가지고 다시 사용하는 것이 좋습니다. 이를 위해 UltraCombo의 인스턴스를 추적하고 특정 LookUpCode에 대한 올바른 인스턴스를 반환하는 헬퍼 개체를 만들 수 있으며 요청 된 인스턴스를 아직 만들지 않은 경우 해당 개체를 만들 수 있습니다. 이러한 항목이 도우미 객체의 사전에 저장되어 있으면 도우미에 IDisposable을 구현하고 dispose가 도우미에 호출 될 때 모든 UltraCombos를 삭제할 수 있습니다. 그런 다음 양식에이 도우미의 단일 인스턴스가 있고 양식이 처리 될 때 처 리를 호출 할 수 있습니다.

+0

그건 의미가 있습니다. 적절한 방법으로 샘플 코드를 게시 할 수 있습니까? – iamCR

+0

공개적으로 Ultracombo를 선언 한 후 계속 진행할 수 있습니까? 물체를 다시 처분한다고 말할까요? – iamCR

+0

이 질문에 도움을 줄 수 있습니까? http://stackoverflow.com/questions/16854159/dropdown-should-show-only-the-display-member – iamCR