// Verified public void Delete() { if (BataDase.Properties.Settings.Default.IsAdmin) { 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; SchedulesM deleteEntity = SourceList[index]; var tickets = (from o in dbContext.TicketsMs where o._schedule_id == deleteEntity._schedule_id select o); if (tickets != null) { dbContext.TicketsMs.RemoveRange(tickets); } dbContext.SchedulesMs.Local.Remove(deleteEntity); // Удаляем НЕконтекстного юзера из SourceList SourceList.Remove(deleteEntity); } // Сохраняем контекст БД dbContext.SaveChanges(); TableV.Current_DataGrid.ItemsSource = SourceList; TableV.Current_DataGrid.Items.Refresh(); } else { 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; } // Покупка билетов тут AddEdit(false); } }
// Verified public void ExecuteAddEdit(object sender, RoutedEventArgs e) { if (trainID.Items.Count < 1) { MessageBox.Show("Поезда отсутствуют в базе данных! Сначала добавьте ХОТЯ БЫ ОДИН поезд!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (routeName.Items.Count < 1) { MessageBox.Show("Маршруты отсутствуют в базе данных! Сначала добавьте ХОТЯ БЫ ОДИН маршрут!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (departureDate.Text == null || departureDate.Text == "") { MessageBox.Show("Укажите дату и время отправления!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } DateTime dateTimeDeparture; if (!DateTime.TryParseExact(departureDate.Text, "dd.MM.yyyy HH:mm", App.Language, System.Globalization.DateTimeStyles.None, out dateTimeDeparture)) { MessageBox.Show("Дата указана некорректно!\nУкажите дату и время в виде: \"dd.MM.yyyy HH:mm\"", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (arrivalDate.Text == null || arrivalDate.Text == "") { MessageBox.Show("Укажите дату и время прибытия!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } DateTime dateTimeArrival; if (!DateTime.TryParseExact(arrivalDate.Text, "dd.MM.yyyy HH:mm", App.Language, System.Globalization.DateTimeStyles.None, out dateTimeArrival)) { MessageBox.Show("Дата указана некорректно!\nУкажите дату и время в виде: \"dd.MM.yyyy HH:mm\"", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (price.Text == null || price.Text == "") { MessageBox.Show("Укажите цену на данный рейс!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } double result; if (!double.TryParse(price.Text, out result)) { MessageBox.Show("Некорректная цена!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } var oneActive = (from o in dbContext.SchedulesMs where (o._train_id == (int)trainID.SelectedItem && o._status == 0) select o).FirstOrDefault(); if (oneActive != null && (isAdd || oneActive._schedule_id != SourceList[index]._schedule_id)) { MessageBox.Show("Данный поезд уже двигается по другому маршруту! Пожалуйста, выберите другой поезд!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error); return; } SchedulesM temp = new SchedulesM(); temp._train_id = Convert.ToInt32(trainID.SelectedItem); temp._route_id = (from o in dbContext.RoutesMs where o._route_name == routeName.SelectedItem.ToString() select o._route_id).FirstOrDefault(); dateTimeDeparture = DateTime.ParseExact(departureDate.Text, "dd.MM.yyyy HH:mm", null); temp._departure_datetime = dateTimeDeparture.Subtract(DateTime.MinValue).TotalMilliseconds; dateTimeArrival = DateTime.ParseExact(arrivalDate.Text, "dd.MM.yyyy HH:mm", null); temp._arrival_datetime = dateTimeArrival.Subtract(DateTime.MinValue).TotalMilliseconds; temp._status = status.SelectedIndex; temp._price = double.Parse(price.Text); // Сохранение нового юзера в БД if (isAdd) { // Добавляем объект в БД dbContext.SchedulesMs.Local.Add(temp); // Очищаем поля trainID.SelectedIndex = 0; routeName.SelectedIndex = 0; status.SelectedIndex = 0; departureDate.Text = null; arrivalDate.Text = null; price.Text = null; } else { // Получаем объект из БД по айди, который будем изменять int id = SourceList[index]._schedule_id; var sched = dbContext.SchedulesMs.Local .Single(o => o._schedule_id == id); // Изменяем, просто изменяя поля на поля объекта temp sched._train_id = temp._train_id; sched._route_id = temp._route_id; sched._departure_datetime = temp._departure_datetime; sched._arrival_datetime = temp._arrival_datetime; sched._status = temp._status; sched._price = temp._price; // Говорим контексту БД, что данный объект был изменен dbContext.Entry(sched).State = EntityState.Modified; } dbContext.SaveChanges(); // Обновление списка SourceList = dbContext.SchedulesMs.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 = dialogV.Button_Execute; // Если это добавление if (isAdd) { button.Content = App.Current.Resources["Text_Add"]; index = -1; trainID.SelectedIndex = 0; routeName.SelectedIndex = 0; status.SelectedIndex = 0; } else if (Settings.Default.IsAdmin == false) // Покупка { // если ничего не выбрано в датагриде то ошибка // если выбрано больше 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; //Если всё ок, вставляем данные для данного юзера в форму, который затем будем менять SchedulesM temp = SourceList[index]; trainID.SelectedItem = temp._train_id; trainID.IsReadOnly = true; routeName.SelectedItem = temp.RoutesM._route_name; routeName.IsReadOnly = true; DateTime startdate = DateTime.MinValue.AddMilliseconds(temp._departure_datetime); DateTime enddate = DateTime.MinValue.AddMilliseconds(temp._arrival_datetime); departureDate.Text = startdate.ToString("dd.MM.yyyy"); departureDate.IsReadOnly = true; arrivalDate.Text = enddate.ToString("dd.MM.yyyy"); arrivalDate.IsReadOnly = true; price.Text = temp._price.ToString(); price.IsReadOnly = true; button.Content = App.Current.Resources["Text_Buy"]; } 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; //Если всё ок, вставляем данные для данного юзера в форму, который затем будем менять SchedulesM temp = SourceList[index]; trainID.SelectedItem = temp._train_id; routeName.SelectedItem = temp.RoutesM._route_name; DateTime startdate = DateTime.MinValue.AddMilliseconds(temp._departure_datetime); DateTime enddate = DateTime.MinValue.AddMilliseconds(temp._arrival_datetime); departureDate.Text = startdate.ToString("dd.MM.yyyy HH:mm"); arrivalDate.Text = enddate.ToString("dd.MM.yyyy HH:mm"); status.SelectedIndex = temp._status; price.Text = temp._price.ToString(); button.Content = App.Current.Resources["Text_Edit"]; } if (Settings.Default.IsAdmin == false) { button.Click += new RoutedEventHandler(ExecuteBuy); // Вешаем элементы в Grid dialogGrid.Children.Add(TrainID); dialogGrid.Children.Add(RouteName); dialogGrid.Children.Add(DepartureDate); dialogGrid.Children.Add(ArrivalDate); dialogGrid.Children.Add(Price); dialogGrid.Children.Add(Seatnum); dialogGrid.Children.Add(CarriageNum); dialogGrid.Children.Add(trainID); dialogGrid.Children.Add(routeName); dialogGrid.Children.Add(departureDate); dialogGrid.Children.Add(arrivalDate); dialogGrid.Children.Add(price); dialogGrid.Children.Add(seatnum); dialogGrid.Children.Add(carriageNum); // Заполняем нижний Button текстом и вешаем локальный обработчик события нажатия dialogV.ShowDialog(); // Очищаем Grid dialogGrid.Children.Remove(TrainID); dialogGrid.Children.Remove(RouteName); dialogGrid.Children.Remove(DepartureDate); dialogGrid.Children.Remove(ArrivalDate); dialogGrid.Children.Remove(Price); dialogGrid.Children.Remove(Seatnum); dialogGrid.Children.Remove(CarriageNum); dialogGrid.Children.Remove(trainID); dialogGrid.Children.Remove(routeName); dialogGrid.Children.Remove(departureDate); dialogGrid.Children.Remove(arrivalDate); dialogGrid.Children.Remove(price); dialogGrid.Children.Remove(seatnum); dialogGrid.Children.Remove(carriageNum); routeName.SelectedIndex = 0; departureDate.Text = null; arrivalDate.Text = null; price.Text = null; seatnum.SelectedIndex = 0; carriageNum.SelectedIndex = 0; } else { button.Click += new RoutedEventHandler(ExecuteAddEdit); // Вешаем элементы в Grid dialogGrid.Children.Add(TrainID); dialogGrid.Children.Add(RouteName); dialogGrid.Children.Add(DepartureDate); dialogGrid.Children.Add(ArrivalDate); dialogGrid.Children.Add(Price); dialogGrid.Children.Add(trainID); dialogGrid.Children.Add(routeName); dialogGrid.Children.Add(departureDate); dialogGrid.Children.Add(arrivalDate); dialogGrid.Children.Add(price); // Заполняем нижний Button текстом и вешаем локальный обработчик события нажатия dialogV.ShowDialog(); // Очищаем Grid dialogGrid.Children.Remove(TrainID); dialogGrid.Children.Remove(RouteName); dialogGrid.Children.Remove(DepartureDate); dialogGrid.Children.Remove(ArrivalDate); dialogGrid.Children.Remove(Price); dialogGrid.Children.Remove(trainID); dialogGrid.Children.Remove(routeName); dialogGrid.Children.Remove(departureDate); dialogGrid.Children.Remove(arrivalDate); dialogGrid.Children.Remove(price); routeName.SelectedIndex = 0; departureDate.Text = null; arrivalDate.Text = null; price.Text = null; } }