我首先使用EF代码为datagrid itemsSourse,如果用户想要删除的项目有效删除,我如何检测PreviewKeyUp事件。
例如,如果用户删除“客户”,而“订单”包含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 :(得分:1)
听起来customer
网格中有一个选定的行,您正在评估是否删除所选的customer
。
customer
和order
都在您的EF模型中。
因此,获取customer
,找到他的ID,然后编写一个查询,检查EF模型中的order
表,查看具有该客户ID的订单。从理论上讲,这是一个想法 - 毫无疑问,您的实际代码看起来会有所不同。
var selCustomerID = (dataGrid.SelectedRow as customer).customerID;
var customerHasOrder = myEFModel.order.Any(ordr => ordr.customerID == selCustomerID);
将Any
调用视为一个循环,它将为myEFModel.order
中的每一行调用lambda,并在lambda第一次返回true时返回true。
ordr => ordr.customerID == selCustomerID
实际上,当然,既然你正在使用LINQ to EF,它就会产生一个SQL查询。