2016-08-08 33 views
1

Ich verwende EF-Code zuerst für die DataGrid-ElementeSourse, wie kann ich beim PreviewKeyUp-Ereignis feststellen, ob die Elemente, die der Benutzer löschen möchte, gelöscht werden können oder nicht.Ermitteln, ob das Löschen der DataGrid-Zeile zum Löschen geeignet ist

Zum Beispiel, wenn Benutzer einen 'Kunden' löschen und eine 'Bestellung' customerId enthält, ist es illegal. Gibt es eine Möglichkeit zu wissen, ob der Bezeichner des Elements, das der Benutzer löschen möchte, als Fremdschlüssel in einer anderen Tabelle verwendet wird? Hat EF irgendwelche Informationen?

So etwas:

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

Sie fragen, ob es einen Weg gibt, herauszufinden, ob ein bestimmter Wert in der 'CustomerID'-Spalte Ihrer 'Order'-Tabelle gefunden wird, ist das richtig? Ist Ihre 'Order'-Tabelle in Ihrem EF-Modell? –

+0

Ja ist das richtig, und ja 'Ordnung' ist im EF-Modell. – codeDom

Antwort

1

Es klingt wie eine ausgewählte Zeile im Raster customer ist, und du bist die Bewertung, ob oder nicht zu löschen, die customer ausgewählt.

Und customer und order sind beide in Ihrem EF-Modell.

So erhalten Sie customer, finden Sie seine ID und schreiben Sie eine Abfrage, die Ihre order Tabelle im EF-Modell für Aufträge mit dieser Kundennummer überprüft. Hier ist die Idee, semantisch - Ihr tatsächlicher Code wird ein bisschen anders aussehen, ohne Zweifel.

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

Denken dieses Any Anruf als wie eine Schleife ist, daß das Lambda für jede Zeile in myEFModel.order nennen will, und return true das erste Mal, wenn die Lambda-true zurück.

In Wirklichkeit, natürlich, da Sie LINQ zu EF tun, erzeugt es eine SQL-Abfrage.