2016-08-08 13 views
1

DataGrid itemsSourseにはEFコードを使用します。削除する項目が削除された場合、PreviewKeyUpイベントでどのように検出できますか?DataGrid行の削除が有効かどうかを確認する

たとえば、ユーザーが「顧客」を削除し、「注文」にcustomerIdが含まれていると、違法です。 削除するアイテムの識別子が別のテーブルの外部キーとして使用されているかどうかを知る方法はありますか? EFには何か情報がありますか?そのような

何か:

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モデルの 'order'テーブルはありますか? –

+0

はい、それは正解です。はい、 'order'はEFモデルです。 – codeDom

答えて

1

選択された行はcustomerグリッドでありますように聞こえる、とあなたはcustomerを選択したことを削除するかどうかを評価しています。

customerorderはどちらもEFモデルにあります。

customerを取得し、IDを見つけ、その顧客IDを持つ注文のEFモデルのorderテーブルを確認するクエリを作成します。意味的には、実際のコードは少し違って見えますが、疑いはありません。

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

myEFModel.orderに行ごとにラムダを呼び出し、ラムダがtrueを返した最初の時間をtrueを返すだろうループ状であるとしてそのAny呼び出しを考えます。

ordr => ordr.customerID == selCustomerID 

もちろん、LINQ to EFを実行しているので、SQLクエリが生成されています。

関連する問題