检测删除DataGrid行是否有效删除

Detect if deleting DataGrid row is valid to delete

我对数据网格 itemsSourse 使用 EF 代码优先,我如何在 PreviewKeyUp 事件中检测用户要删除的项目是否有效删除。

例如,如果用户删除了一个'customer',而一个'order'包含customerId,这是非法的。 有什么方法可以知道用户要删除的项目的标识符是否被用作另一个 table 中的外键? 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 !");
            }
        }
    }
}

听起来 customer 网格中有一个选定的行,您正在评估是否删除该选定的 customer

并且 customerorder 都在您的 EF 模型中。

因此获取 customer,找到他的 ID,然后编写一个查询来检查您在 EF 模型中的 order table 是否具有该客户 ID 的订单。这是语义上的想法——毫无疑问,您的实际代码看起来会有点不同。

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

认为 Any 调用就像一个循环,它将为 myEFModel.order 中的每一行调用 lambda,并且 return 第一次 lambda [=30] 为真=] 是真的。

ordr => ordr.customerID == selCustomerID

当然,实际上,由于您正在执行 LINQ to EF,因此它会生成 SQL 查询。