// Verified public void ExecuteAddEdit(object sender, RoutedEventArgs e) { // Проверки TextBox на null и пустую строку if (model.Text == null || model.Text == "") { MessageBox.Show("Укажите модель!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else { foreach (var item in SourceList) { if (item._model == model.Text) { // Если сейчас добавление, то просто вывести ошибку if (isAdd) { MessageBox.Show("Указанная модель уже существует!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Если сейчас изменение, то в случае совпадения индексов ошибку не выводить else { // Вывести ошибку, если элементы таблицы имеют разные индексы, // т.е. такой логин уже есть у кого то другого в таблице if (item._carriage_id != SourceList[index]._carriage_id) { MessageBox.Show("Указанная модель уже существует!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } } } } } if (type.Text == null || type.Text == "") { MessageBox.Show("Укажите тип!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } float resultFloat; int resultInt; // Проверки TextBox на null и пустую строку if (weight.Text == null || weight.Text == "") { MessageBox.Show("Укажите вес!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else if (!float.TryParse(weight.Text, out resultFloat)) { MessageBox.Show("Некорректная вес!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (maxLoadWeight.Text == null || maxLoadWeight.Text == "") { MessageBox.Show("Укажите максимально разрешённую массу!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else if (!float.TryParse(weight.Text, out resultFloat)) { MessageBox.Show("Некорректная максимально разрешённая масса!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (type.SelectedIndex == 0) { if (maxSeats.Text == null || maxSeats.Text == "") { MessageBox.Show("Укажите количество мест!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } else if (!int.TryParse(maxSeats.Text, out resultInt)) { MessageBox.Show("Некорректное количество мест!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } } CarriagesM temp = new CarriagesM(); temp._model = model.Text; temp._type = type.SelectedIndex; temp._weight = float.Parse(weight.Text); temp._max_load_weight = float.Parse(maxLoadWeight.Text); if (type.SelectedIndex == 0) { temp._max_seats = int.Parse(maxSeats.Text); temp._class = carriageClass.SelectedIndex; } else { temp._max_seats = -1; temp._class = -1; } // Сохранение нового юзера в БД if (isAdd) { // Добавляем объект в БД dbContext.CarriagesMs.Local.Add(temp); // Очищаем поля model.Text = null; type.SelectedIndex = 0; weight.Text = null; maxLoadWeight.Text = null; maxSeats.Text = null; carriageClass.SelectedIndex = 0; } else { // Получаем объект из БД по айди, который будем изменять int id = SourceList[index]._carriage_id; var loco = dbContext.CarriagesMs.Local .Single(o => o._carriage_id == id); // Изменяем, просто изменяя поля на поля объекта temp loco._model = temp._model; loco._type = temp._type; loco._weight = temp._weight; loco._max_load_weight = temp._max_load_weight; loco._max_seats = temp._max_seats; loco._class = temp._class; // Говорим контексту БД, что данный объект был изменен dbContext.Entry(loco).State = EntityState.Modified; } dbContext.SaveChanges(); // Обновление списка SourceList = dbContext.CarriagesMs.Local.ToBindingList(); TableV.Current_DataGrid.ItemsSource = SourceList; TableV.Current_DataGrid.Items.Refresh(); }
// 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) { index = TableV.Current_DataGrid.SelectedIndex; CarriagesM deleteEntity = SourceList[index]; var trains = (from o in dbContext.TrainsMs where (o._first_carriage_id == deleteEntity._carriage_id || o._second_carriage_id == deleteEntity._carriage_id || o._third_carriage_id == deleteEntity._carriage_id || o._fourth_carriage_id == deleteEntity._carriage_id || o._fifth_carriage_id == deleteEntity._carriage_id) select o); if (trains != null) { foreach (var train in trains) { //1 if (train._first_carriage_id == deleteEntity._carriage_id) { train._first_carriage_id = -1; } //2 if (train._second_carriage_id == deleteEntity._carriage_id) { train._second_carriage_id = -1; } //3 if (train._third_carriage_id == deleteEntity._carriage_id) { train._third_carriage_id = -1; } //4 if (train._fourth_carriage_id == deleteEntity._carriage_id) { train._fourth_carriage_id = -1; } //5 if (train._fifth_carriage_id == deleteEntity._carriage_id) { train._fifth_carriage_id = -1; } } } dbContext.CarriagesMs.Local.Remove(deleteEntity); // Удаляем НЕконтекстного юзера из SourceList SourceList.Remove(deleteEntity); } // Сохраняем контекст БД dbContext.SaveChanges(); 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 = 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; // Если всё ок, вставляем данные для данного юзера в форму, который затем будем менять CarriagesM temp = SourceList[index]; model.Text = temp._model; type.SelectedIndex = temp._type; weight.Text = temp._weight.ToString(); maxLoadWeight.Text = temp._max_load_weight.ToString(); if (temp._max_seats != -1) { maxSeats.Text = temp._max_seats.ToString(); } if (temp._class != -1) { carriageClass.SelectedIndex = temp._class; } button.Content = App.Current.Resources["Text_Edit"]; } button.Click += new RoutedEventHandler(ExecuteAddEdit); // Вешаем элементы в Grid dialogGrid.Children.Add(Model); dialogGrid.Children.Add(Type); dialogGrid.Children.Add(Weight); dialogGrid.Children.Add(MaxLoadWeight); dialogGrid.Children.Add(MaxSeats); dialogGrid.Children.Add(CarriageClass); dialogGrid.Children.Add(model); dialogGrid.Children.Add(type); dialogGrid.Children.Add(weight); dialogGrid.Children.Add(maxLoadWeight); dialogGrid.Children.Add(maxSeats); dialogGrid.Children.Add(carriageClass); // Заполняем нижний Button текстом и вешаем локальный обработчик события нажатия dialogV.ShowDialog(); // Очищаем Grid dialogGrid.Children.Remove(model); dialogGrid.Children.Remove(type); dialogGrid.Children.Remove(weight); dialogGrid.Children.Remove(maxLoadWeight); dialogGrid.Children.Remove(maxSeats); dialogGrid.Children.Remove(carriageClass); dialogGrid.Children.Remove(Model); dialogGrid.Children.Remove(Type); dialogGrid.Children.Remove(Weight); dialogGrid.Children.Remove(MaxLoadWeight); dialogGrid.Children.Remove(CarriageClass); dialogGrid.Children.Remove(MaxSeats); model.Text = null; type.SelectedIndex = 0; weight.Text = null; maxLoadWeight.Text = null; maxSeats.Text = null; carriageClass.SelectedIndex = 0; maxSeats.IsEnabled = true; carriageClass.IsEnabled = true; }