检测删除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
。
并且 customer
和 order
都在您的 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 查询。
我对数据网格 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
。
并且 customer
和 order
都在您的 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 查询。