0

.NET 4.0 및 SQL Server 2008 R2를 사용하고 있습니다.강력한 형식의 데이터 집합에서 행을 삭제 한 후에 예외가 throw됩니까?

Companies (PK CompanyID) 
Addresses (PK AddressID, FK CompanyID) 
ContactPersons (PK ContactPersonID, FK CompanyID) 

회사 ID는 사용자가 수동으로 할당됩니다

나는 세 개의 테이블이있다. 다른 ID는 자동으로 생성됩니다. 회사는 ContactPerson과 일대 다 관계를 맺고 있습니다. 계단식 변경 사항을 설정했습니다.

DataGridView에서 회사의 모든 레코드를 표시하고 행을 클릭하면 ContactPerson의 해당 레코드가 두 번째 DataGridView에 표시됩니다.

그럼 난과 함께 테이블 ContactPersons에서 행을 삭제합니다

var dataRows_ContactPersons = from row in this.m_SoldaCompaniesFileDataSet.ContactPersons 
           where row.CompanyID == companyID 
           select new 
           { 
           ContactPersonID = row.ContactPersonID, 
           CompanyID = row.CompanyID, 
           NameFirst = row.NameFirst, 
           NameLast = row.NameLast, 
           PhoneNumber = row.PhoneNumber, 
           EmailAddress = row.EmailAddress, 
           Position = row.Position 
           }; 

내가 DeletedRowInaccessibleException가 나타납니다

DataRow row = m_SoldaCompaniesFileDataSet.ContactPersons.Rows.Find(this.m_CurrentContactPerson.ContactPersonID); 
row.Delete(); 

그리고 데이터 소스를 만들 함께있는 DataGridView를 채우기 위해 테이블을 쿼리 할 때 . 어떤 아이디어가 내가 여기서 잘못하고있는 것인가? 내가 곧 (이 모두 하루 동안 나를 데려하지만) 위의 질문을 작성 후를 알아 낸

[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] 
      public int CompanyID { 
       get { 
        try { 
         return ((int)(this[this.tableContactPersons.CompanyIDColumn])); // <<<--- DeletedRowInaccessibleException 
        } 
        catch (global::System.InvalidCastException e) { 
         throw new global::System.Data.StrongTypingException("The value for column \'CompanyID\' in table \'ContactPersons\' is DBNull.", e); 
        } 
       } 

답변

1

:

var dataRows_ContactPersons = from row in this.m_SoldaCompaniesFileDataSet.ContactPersons 
           where row.RowState != DataRowState.Deleted && row.CompanyID == companyID 
           select new 
           { 
            ContactPersonID = row.ContactPersonID, 
            CompanyID = row.CompanyID, 
            NameFirst = row.NameFirst, 
            NameLast = row.NameLast, 
            PhoneNumber = row.PhoneNumber, 
            EmailAddress = row.EmailAddress, 
            Position = row.Position 
           }; 

는 사실을 제외하고는 형식화 된 데이터 집합에 대한이 자동 생성 된 코드에서 온다

row.RowState != DataRowState.Deleted 
:

이이 검사를 수행하여 LINQ 쿼리에서 삭제 된 행을 제외 할 필요가있다

관련 문제