2016-08-08 2 views
1

DataGrid itemsSourse에 EF 코드 우선을 사용합니다. 삭제하려는 항목이 삭제 될 수있는 경우 PreviewKeyUp 이벤트에서 어떻게 감지 할 수 있습니까?삭제할 DataGrid 행을 삭제할 수 있는지 확인

예를 들어 사용자가 '고객'을 삭제하고 '주문'에 customerId가 포함 된 경우 이는 불법입니다. 삭제하려는 항목의 식별자가 다른 테이블의 외래 키로 사용되고 있는지 알 수있는 방법이 있습니까? EF에 관한 정보가 있습니까? 그런

뭔가 다음 customer 그리드에서 선택한 행이처럼

private void DataGridEX_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    if (e.Key == Key.Delete) { 
     if (e.OriginalSource is DataGridCell) { 
      DataGrid dataGrid = sender; 
      if (!IsValidToDelete(dataGrid.SelectedCells)) { 
       e.Handled = true; 
       MsgBox("Not Valid To Delete !"); 
      } 
     } 
    } 
} 
+0

'order' 테이블의'CustomerID' 열에 주어진 값이 있는지 알아내는 방법이 있는지 물어 보는 것이 맞습니까? EF 모델에 주문 표가 있습니까? –

+0

예, EF 모델에 맞습니다. '주문'입니다. – codeDom

답변

1

같은데, 당신은 customer을 선택한 것을 삭제할지 여부를 평가하고 있습니다.

customerorder은 둘 다 EF 모델에 있습니다.

customer 그 ID를 찾아 해당 고객 ID의 주문에 대해 EF 모델의 order 테이블을 확인하는 쿼리를 작성하십시오. 의미 상으로는 아이디어가 있습니다. 실제 코드는 약간 달라 보이지만 의심의 여지가 없습니다. myEFModel.order에서 각 행의 람다를 호출 람다가 true를 돌려 처음으로 진정한 돌아갑니다 루프처럼되는 등 그 Any 전화의

var selCustomerID = (dataGrid.SelectedRow as customer).customerID; 
var customerHasOrder = myEFModel.order.Any(ordr => ordr.customerID == selCustomerID); 

생각합니다.

ordr => ordr.customerID == selCustomerID 

실제로 LINQ to EF를 수행 중이므로 SQL 쿼리가 생성됩니다.

관련 문제