// Verified public void Delete() { // если ничего не выбрано в датагриде то ошибка if (TableV.Current_DataGrid.SelectedItems.Count < 1) { MessageBox.Show("Выберите элементы для удаления!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Пока есть элементы, которые нужно удалить, то крутится цикл while (TableV.Current_DataGrid.SelectedItems.Count > 0) { // индекс текущей выбранной строки в DataGrid // кастыль, но куда без кастылей? index = TableV.Current_DataGrid.SelectedIndex; // Прежде чем удалить элемент из данной таблицы, // нужно удалить его из зависимых таблиц (см. Физическую модель) // иначе будет ошибка и приложение крашнится // Получение элемента, который будем удалять UsersM deleteEntity = SourceList[index]; if (BataDase.Properties.Settings.Default.CurrentUserId == deleteEntity._user_id) { MessageBox.Show("Нельзя удалить аккаунт, который в данный момент авторизован в приложении!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); TableV.Current_DataGrid.SelectedItems.RemoveAt(index); continue; } // Получение всех записей из зависимой таблицы с билетами, // которые содержат нашего юзера var tickets = dbContext.TicketsMs .Where(o => o._user_id == deleteEntity._user_id); // Если в зависимых таблицах есть записи с нашим юзером, // то произвести чистим зависимую таблицу if (tickets != null) { dbContext.TicketsMs.RemoveRange(tickets); } // После того, как подчистили зависимые таблицы, // выбираем сам объект для удаления из КОНТЕКСТА БД var contextDeleteEntity = dbContext.UsersMs.Local .Single(o => o._user_id == deleteEntity._user_id); // Удаляем контекстного юзера из контекста dbContext.UsersMs.Local.Remove(contextDeleteEntity); // Удаляем НЕконтекстного юзера из SourceList SourceList.Remove(deleteEntity); } dbContext.SaveChanges(); TableV.Current_DataGrid.ItemsSource = SourceList; TableV.Current_DataGrid.Items.Refresh(); }
public void ExecuteAddMoney(object sender, RoutedEventArgs e) { float result; // Проверки TextBox на null и пустую строку if (money.Text == null || money.Text == "") { MessageBox.Show("Укажите сумму!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else if (!float.TryParse(money.Text, out result)) { MessageBox.Show("Некорректная сумма!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } UsersM temp = new UsersM(); temp._bill = float.Parse(money.Text); for (int i = 0; i < users.Count; i++) { // Ищем из списка юзеров, того кто на данный момент пользуется программой if (users[i]._user_id == userID) { users[i]._bill += temp._bill; MessageBox.Show(App.Current.Resources["Text_AddMoneyMessage"].ToString() + " " + users[i]._bill.ToString() + " " + App.Current.Resources["Text_Rubles"].ToString(), "Info", MessageBoxButton.OK, MessageBoxImage.Information); } dbContext.Entry(users[i]).State = EntityState.Modified; } dbContext.SaveChanges(); users = dbContext.UsersMs.Local.ToBindingList(); }
// Verified public void ExecuteAddEdit(object sender, RoutedEventArgs e) { // Проверки TextBox на null и пустую строку if (surname.Text == null || surname.Text == "") { MessageBox.Show("Укажите фамилию!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (name.Text == null || name.Text == "") { MessageBox.Show("Укажите имя!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Проверка DateTime на соответствие паттерну даты dd.MM.yyyy DateTime dateTime; if (!DateTime.TryParseExact(birthday.Text, "dd.MM.yyyy", App.Language, System.Globalization.DateTimeStyles.None, out dateTime)) { MessageBox.Show("Дата указана некорректно!\nУкажите дату в виде: \"dd.MM.yyyy\"", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Проверки TextBox на null и пустую строку if (login.Text == null || login.Text == "") { MessageBox.Show("Укажите логин!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else { // Если юзер с данным логином уже есть в таблице, то вывести ошибку foreach (var item in SourceList) { if (item._login == login.Text) { // Если сейчас добавление, то просто вывести ошибку if (isAdd) { MessageBox.Show("Пользователь с данным логином уже существует!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Если сейчас изменение, то в случае совпадения индексов ошибку не выводить else { // Вывести ошибку, если элементы таблицы имеют разные индексы, // т.е. такой логин уже есть у кого то другого в таблице if (item._user_id != SourceList[index]._user_id) { MessageBox.Show("Пользователь с данным логином уже существует!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } } } } } if (password.Text == null || password.Text == "") { MessageBox.Show("Укажите пароль!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Проверки TextBox для денег на null и пустую строку // Если строка пустая, то вставляется "0" double result; if (bill.Text == null || bill.Text == "") { bill.Text = "0"; } else if (!double.TryParse(bill.Text, out result)) { MessageBox.Show("Некорректная сумма!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Создание нового Юзера UsersM temp = new UsersM(); temp._surname = surname.Text; temp._name = name.Text; temp._lastname = lastname.Text; temp._sex = sex.SelectedIndex; dateTime = DateTime.ParseExact(birthday.Text, "dd.MM.yyyy", null); temp._birthday = dateTime.Subtract(DateTime.MinValue).TotalMilliseconds; temp._login = login.Text; temp._pass = password.Text; temp._access = access.SelectedIndex; temp._bill = double.Parse(bill.Text); // Сохранение нового юзера в БД if (isAdd) { // Добавляем объект в БД dbContext.UsersMs.Local.Add(temp); // Очищаем поля surname.Text = null; name.Text = null; lastname.Text = null; sex.SelectedIndex = 0; birthday.Text = null; login.Text = null; password.Text = null; access.SelectedIndex = 0; bill.Text = null; } else { // Получаем объект из БД по айди, который будем изменять int id = SourceList[index]._user_id; var user = dbContext.UsersMs.Local .Single(o => o._user_id == id); // Изменяем, просто изменяя поля на поля объекта temp user._surname = temp._surname; user._name = temp._name; user._lastname = temp._lastname; user._sex = temp._sex; temp._birthday = temp._birthday; user._login = temp._login; user._pass = temp._pass; user._access = temp._access; user._bill = temp._bill; // Говорим контексту БД, что данный объект был изменен dbContext.Entry(user).State = EntityState.Modified; } // Сохранение контекста БД dbContext.SaveChanges(); dbContext.UsersMs.Load(); SourceList = dbContext.UsersMs.Local.ToBindingList(); TableV.Current_DataGrid.ItemsSource = SourceList; TableV.Current_DataGrid.Items.Refresh(); }
// Verified public void AddEdit(bool isAdd) { // Сохранить состояние, добавление это или изменение this.isAdd = isAdd; // Создаём диалоговое окно DialogV dialogV = new DialogV(); Grid dialogGrid = dialogV.Dialog_Grid; // Заполняем нижний Button текстом и вешаем локальный обработчик события нажатия Button button = dialogV.Button_Execute; // Если это добавление if (isAdd) { button.Content = App.Current.Resources["Text_Add"]; index = -1; } // Если это изменение else { // если ничего не выбрано в датагриде то ошибка // если выбрано больше 1 элемента то тоже ошибка if (TableV.Current_DataGrid.SelectedItems.Count < 1) { MessageBox.Show("Выберите элемент для изменения!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else if (TableV.Current_DataGrid.SelectedItems.Count > 1) { MessageBox.Show("Можно выбрать для изменения не более ОДНОГО элемента за раз!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // индекс текущей выбранной строки в DataGrid // кастыль, но куда без кастылей? index = TableV.Current_DataGrid.SelectedIndex; // Если всё ок, вставляем данные для данного юзера в форму, который затем будем менять UsersM temp = SourceList[index]; surname.Text = temp._surname; name.Text = temp._name; lastname.Text = temp._lastname; sex.SelectedIndex = temp._sex; DateTime startdate = DateTime.MinValue.AddMilliseconds(temp._birthday); birthday.Text = startdate.ToString("dd.MM.yyyy"); login.Text = temp._login; password.Text = temp._pass; access.SelectedIndex = temp._access; bill.Text = temp._bill.ToString(); button.Content = App.Current.Resources["Text_Edit"]; } // назначаем метод для события кнопки // метод сразу обрабатывает и добавление и изменение, типа оптимизация button.Click += new RoutedEventHandler(ExecuteAddEdit); // Вешаем элементы в Grid dialogGrid.Children.Add(Surname); dialogGrid.Children.Add(Name); dialogGrid.Children.Add(Lastname); dialogGrid.Children.Add(Sex); dialogGrid.Children.Add(Birthday); dialogGrid.Children.Add(Login); dialogGrid.Children.Add(Password); dialogGrid.Children.Add(Access); dialogGrid.Children.Add(Bill); dialogGrid.Children.Add(surname); dialogGrid.Children.Add(name); dialogGrid.Children.Add(lastname); dialogGrid.Children.Add(sex); dialogGrid.Children.Add(birthday); dialogGrid.Children.Add(login); dialogGrid.Children.Add(password); dialogGrid.Children.Add(access); dialogGrid.Children.Add(bill); // Показываем диалоговое окно dialogV.ShowDialog(); // Очищаем Grid dialogGrid.Children.Remove(surname); dialogGrid.Children.Remove(name); dialogGrid.Children.Remove(lastname); dialogGrid.Children.Remove(sex); dialogGrid.Children.Remove(birthday); dialogGrid.Children.Remove(login); dialogGrid.Children.Remove(password); dialogGrid.Children.Remove(access); dialogGrid.Children.Remove(bill); dialogGrid.Children.Remove(Surname); dialogGrid.Children.Remove(Name); dialogGrid.Children.Remove(Lastname); dialogGrid.Children.Remove(Sex); dialogGrid.Children.Remove(Birthday); dialogGrid.Children.Remove(Login); dialogGrid.Children.Remove(Password); dialogGrid.Children.Remove(Access); dialogGrid.Children.Remove(Bill); // Очищаем поля surname.Text = null; name.Text = null; lastname.Text = null; sex.SelectedIndex = 0; birthday.Text = null; login.Text = null; password.Text = null; access.SelectedIndex = 0; bill.Text = null; }
private void Button_Click(object sender, RoutedEventArgs e) { if (sender == Button_Back) { MainVM.LoginVM_RelayCommand.Execute(null); } else if (sender == Button_SignUp) { // Регистрация // Проверки TextBox на null и пустую строку if (TextBox_Surname.Text == null || TextBox_Surname.Text == "") { MessageBox.Show("Укажите фамилию!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (TextBox_Name.Text == null || TextBox_Name.Text == "") { MessageBox.Show("Укажите имя!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Проверка DateTime на соответствие паттерну даты dd.MM.yyyy DateTime dateTime; if (!DateTime.TryParseExact(TextBox_Birthday.Text, "dd.MM.yyyy", App.Language, System.Globalization.DateTimeStyles.None, out dateTime)) { MessageBox.Show("Дата указана некорректно!\nУкажите дату в виде: \"dd.MM.yyyy\"", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } AppDBContext dBContext = AppDBContext.GetInstance(); dBContext.UsersMs.Load(); // Проверки TextBox на null и пустую строку if (TextBox_Login.Text == null || TextBox_Login.Text == "") { MessageBox.Show("Укажите логин!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else { string login = TextBox_Login.Text; var user = (from u in dBContext.UsersMs where u._login == login select u).FirstOrDefault(); // Если юзер с данным логином уже есть в таблице, то вывести ошибку if (user != null) { MessageBox.Show("Пользователь с данным логином уже существует!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } } if (TextBox_Pass.Text == null || TextBox_Pass.Text == "") { MessageBox.Show("Укажите пароль!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (TextBox_RepeatPass.Text != TextBox_Pass.Text) { MessageBox.Show("Пароли не совпадают!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Создание нового Юзера UsersM temp = new UsersM(); temp._surname = TextBox_Surname.Text; temp._name = TextBox_Name.Text; temp._lastname = TextBox_Lastname.Text; temp._sex = ComboBox_Sex.SelectedIndex; dateTime = DateTime.ParseExact(TextBox_Birthday.Text, "dd.MM.yyyy", null); temp._birthday = dateTime.Subtract(DateTime.MinValue).TotalMilliseconds; temp._login = TextBox_Login.Text; temp._pass = TextBox_Pass.Text; temp._access = ComboBox_AccessLevel.SelectedIndex; temp._bill = 0; dBContext.UsersMs.Local.Add(temp); dBContext.SaveChanges(); MessageBox.Show("Вы были успешно зарегистрированы!", "Добро пожаловать!", MessageBoxButton.OK, MessageBoxImage.Information); // Переход обратно на логин MainVM.LoginVM_RelayCommand.Execute(null); } }