예제 #1
0
        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;
            }
        }
예제 #2
0
        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);
                }
            }
        }