0

Имеется 3 страницы и в каждой есть DataGrid в который подтягивается инфа из БД (расписание автобусов) посредством EntityFramawork. Так же имеется одно окно, по типу Билета, в который должна передаваться информация из ранее выбранной страницы с расписанием. [B]Проблема[/B]: Из одной страницы с расписанием и передачу в другое окно я сделать смог, а вот когда из других страницы пытаюсь сделать это, то уже происходит какой-то конфликт (не понимаю какой) между переносом данных, и, отрисовка и передача данных в "Билет" пропадает, что не так? Код страницы с расписанием из которой получается перенести данные:

BusDBEF ent = new BusDBEF();

    public ticketChelPage()
    {
        InitializeComponent();
        //подгрузка из БД в DataGrid
        chelInfo.ItemsSource = ent.Челябинск.ToList();
    }
    private void Next_Click(object sender, RoutedEventArgs e)
    {
        Челябинск chel = chelInfo.SelectedItem as Челябинск;
        if (chel!=null)
        {
            try
            {
                if (txtSecName.Text.Length != 0 && txtSecName.Text.Length != 0 && txtEmail.Text.Length != 0)
                { 
                   //проверка мыла и сохранение в БД
                    string emChek = Convert.ToString(txtEmail.Text);
                    bool testEm = CheckEmail.EmailChecker(emChek);
                    if (testEm == true)
                    {
                        User addUser = new User
                        {
                            SecondName = txtSecName.Text,
                            FirstName = txtFirstName.Text,
                            ThirdName = txtThirdName.Text,
                            Email = txtEmail.Text
                        };
                        ent.User.Add(addUser);
                        ent.SaveChanges();
                        reservedTicketWindow reserved = new reservedTicketWindow(chel);
                        Manager.MainFrame.Navigate(new MainPage());
                        reserved.Show();
                    }
                }
                else
                {
                        MessageBox.Show("Заполните все поля под *", "Внимание", MessageBoxButton.OK, MessageBoxImage.Warning);
                }    
            }
            catch
            {
                MessageBox.Show("Ошибка подключения к БД", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
            } 
        }
        else
        {
            MessageBox.Show("Выберите время", "Внимание!", MessageBoxButton.OK, MessageBoxImage.Warning);
        }
    }

Код страницы "Билета"

BusDBEF ent = new BusDBEF();
    Челябинск _chel;
    public reservedTicketWindow()
    {
    }
    public reservedTicketWindow(Челябинск chel)
    {
        InitializeComponent();
        try
        {
            _chel = chel;
            DataContext = chel;
        }
        catch
        {
            MessageBox.Show("Error");
        } 
        //рандомайзер билета        
        Random rnd = new Random();
        int bilet = rnd.Next(10000);
        txtTicketNumber.Text = Convert.ToString(bilet);
    }

Код страницы из которой НЕ получается вытянуть данные:

BusDBEF ent = new BusDBEF();
    public ticketAlexPage()
    {
        InitializeComponent();
        //вывод из БД в DataGrid
        alexInfo.ItemsSource = ent.Александровка.ToList();
    }
    private void Next_Click(object sender, RoutedEventArgs e)
    {
        Александровка alexa = alexInfo.SelectedItem as Александровка;
        if (alexa != null)
        {
            try
            {
                if (txtSecName.Text.Length != 0 && txtSecName.Text.Length != 0 && txtEmail.Text.Length != 0)
                {
                    //проверка мыла и сохрение в БД
                    string emChek = Convert.ToString(txtEmail.Text);
                    bool testEm = CheckEmail.EmailChecker(emChek);
                    if (testEm == true)
                    {
                        User addUser = new User
                        {
                            SecondName = txtSecName.Text,
                            FirstName = txtFirstName.Text,
                            ThirdName = txtThirdName.Text,
                            Email = txtEmail.Text
                        };
                        ent.User.Add(addUser);
                        ent.SaveChanges();
                        reservedTicketWindow reserved = new reservedTicketWindow(alexa);
                        Manager.MainFrame.Navigate(new MainPage());
                        reserved.Show();
                    }
                }
                else
                {
                    MessageBox.Show("Заполните все поля под *", "Внимание", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            catch
            {
                MessageBox.Show("Ошибка подключения к БД", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        else
        {
            MessageBox.Show("Выберите время", "Внимание!", MessageBoxButton.OK, MessageBoxImage.Warning);
        }
    }
  • По поводу самого кода - уважаемый, ваш код ужасен. В C# принято использовать CamelCase. Русские символы тоже не желательны. Вы намешали все в одно место, разделите по методам/классам. Ну и уважаемый, это WPF, а в нем есть очень мощный инструмент - привязки, научитесь их делать, ибо сейчас у вас несколько источников данных, а должен быть 1, с которым все другие окна будут взаимодействовать. – EvgeniyZ Apr 10 '20 at 10:15
  • @EvgeniyZ, за русские буквы отвечает БД, в ней название таблиц и все данные на русском. А про биндинги - они в разметке реализованы. А вот про источник данных - недопонял, ибо за него отвечает SSMS – Alex Grand Apr 10 '20 at 11:02
  • Бд не отвечает за что либо, вы ее такой сделали. Вот здесь тоже хотите сказать БД виновата? Челябинск _chel; Вы создали класс с русским названием, его и используете, ну не правильно это. Судя по txtSecName.Text у вас нет какой либо привязки, да, может местами вы и пытаетесь ее реализовать, но все равно это не то. У вас должен быть 1 класс, который установлен как DataContext и уже в XAML вы задаете все необходимые привязки. – EvgeniyZ Apr 10 '20 at 11:10
  • Источник данных - также, как и привязки, у вас есть допустим 1 класс, который отвечает за работу с базой, хранит в себе что у вас там, (города?), дальше его и используете везде, привязываетесь к нему, в нем меняете значения необходимые, а он меняет это в базе. То есть 1 ответственный класс за данные. – EvgeniyZ Apr 10 '20 at 11:11

0 Answers0