protected static void PreviewKeyDown(object eventArgs) { var tempEventArgs = (object[])eventArgs; if (!(tempEventArgs[0] is KeyEventArgs e && tempEventArgs[1] is DataGrid sender)) { throw new ArgumentException("Bad arguments in PreviewKeyDown"); } switch (e.Key) { case Key.Escape: sender.CancelEdit(); sender.CancelEdit(); return; case Key.Delete: if (!(sender.SelectedItem is TEntity entity)) { return; } using (var context = new BookOrdersContext()) { try { PropertyInfo property = context.GetType().GetProperty(typeof(TEntity).Name.Replace("And", "sAnd") + 's'); if (property != null) { ((DbSet <TEntity>)property.GetValue(context)).Attach(entity); ((DbSet <TEntity>)property.GetValue(context)).Remove(entity); } context.SaveChanges(); } catch (DbUpdateException exception) { if (!(exception.InnerException is UpdateException innerException)) { throw; } if (!(innerException.InnerException is Npgsql.PostgresException innerInnerException)) { throw; } if (innerInnerException.SqlState == "23503") { MessageBox.Show(innerInnerException.MessageText, "Error", MessageBoxButton.OK, MessageBoxImage.Error); e.Handled = true; } else { throw; } } } return; } }
protected static void DataGridRowEditEnding(object eventArgs) { var tempEventArgs = (object[])eventArgs; if (!(tempEventArgs[0] is DataGridRowEditEndingEventArgs e && tempEventArgs[1] is DataGrid sender)) { throw new ArgumentException("Bad arguments in PreviewKeyDown"); } if (e.EditAction == DataGridEditAction.Cancel || !(e.Row.Item is TEntity entity) || !entity.Validator.IsValid || !entity.IsDirty) { return; } using (var context = new BookOrdersContext()) { try { if (e.Row.IsNewItem) { PropertyInfo property = context.GetType().GetProperty(typeof(TEntity).Name.Replace("And", "sAnd") + 's'); if (property != null) { ((DbSet <TEntity>)property.GetValue(context)).Add(entity); } } else { context.Entry(entity).State = EntityState.Modified; } context.SaveChanges(); } catch (Exception exception) { sender.CancelEdit(); sender.CancelEdit(); Exception innerException = exception; while (innerException?.InnerException != null) { innerException = innerException.InnerException; } MessageBox.Show(innerException?.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } }