Проблема получения записи из модели

209
27 апреля 2018, 11:35

Есть модель заказы. Есть форма на которой я работаю с этой моделью. Подтягиваю её в dataGridView. Нажимаю на определённый заказ и нажимаю кнопку утвердить заказ. Перехожу на другую форму где нажимаю Ок. И в базу вносятся изменения. И всё работало шикарно. Но когда я добавил в событие

dataGridView1_CellClick

подтягивание модели. Тогда почему то на форме уже не подтягиваются изменения которые я внёс в базу когда утверждал заказ. Но если я снова перехожу на форму где заказ утверждается и нажимается кнопка Ок, там моделька подтягивается со всеми изменениями, то есть реальная. Какой то полтергейст. Не могу понять в чём дело. Вот код формы на которой грида:

public partial class Form10 : Form
    {
        Context db;
        DataTable dt;
        public void FillGrid(List<Order> orders)
        {
            dt = new DataTable();
            dt.Columns.Add("Id", typeof(Int32));
            dt.Columns.Add("Дата заказа", typeof(DateTime));
            dt.Columns.Add("Марка автомобиля", typeof(String));
            dt.Columns.Add("Модель автомобиля", typeof(String));
            dt.Columns.Add("Цена", typeof(Int32));
            dt.Columns.Add("Фамилия клиента", typeof(String));
            dt.Columns.Add("Имя клиента", typeof(String));
            dt.Columns.Add("Отчество клиента", typeof(String));
            dt.Columns.Add("Фамилия продавца", typeof(String));
            dt.Columns.Add("Имя продавца", typeof(String));
            dt.Columns.Add("Отчество продавца", typeof(String));
            dt.Columns.Add("Статус заказа", typeof(String));
            dt.Clear();
            foreach(Order ord in orders)
            {
                DataRow row = dt.NewRow();
                row["Id"] = ord.Id;
                row["Дата заказа"] = ord.OrderDate;
                row["Марка автомобиля"] = ord.Cars.Mark.MarkName;
                row["Модель автомобиля"] = ord.Cars.CarModel.ModelName;
                row["Цена"] = ord.Cars.Price;
                row["Фамилия клиента"] = ord.Clients.CSurname;
                row["Имя клиента"] = ord.Clients.CName;
                row["Отчество клиента"] = ord.Clients.CPatronymic;
                row["Фамилия продавца"] = ord.Sellers != null ? ord.Sellers.SSurname : null;
                row["Имя продавца"] = ord.Sellers != null ? ord.Sellers.SName : null;
                row["Отчество продавца"] = ord.Sellers != null ? ord.Sellers.SPatronymic : null;
                row["Статус заказа"] = ord.Status;
                dt.Rows.Add(row);
            }
            dataGridView1.DataSource = dt;
            dataGridView1.Columns[0].Visible = false;
        }
        public int OrderId = 0;
        public Form10(List<Order> orders)
        {
            InitializeComponent();
            db = new Context();
            FillGrid(orders);
            button1.Enabled = false;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form11 f11 = new Form11(OrderId);
            this.Hide();
            if (f11.ShowDialog() == DialogResult.OK)
                MessageBox.Show("Заказ утверждён");
            button1.Enabled = false;
            this.Show();
            FillGrid(db.Order.ToList());
        }
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                int index = dataGridView1.SelectedRows[0].Index;
                bool converted = Int32.TryParse(dataGridView1[0, index].Value.ToString(), out OrderId);
                if (converted == false)
                    return;
                Order ord = db.Order.FirstOrDefault(o => o.Id == OrderId);
                if(ord.Status != "Заказ утверждён")
                    button1.Enabled = true;
            }
        }
        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            Order order = db.Order.FirstOrDefault(o => o.Id == OrderId);
            Form6 f6 = new Form6(order.CarsId);
            this.Hide();
            f6.ShowDialog();
            button1.Enabled = false;
            this.Show();
        }
    }

Вот код формы на которой кнопка утверждения и внесения в базу изменений:

public partial class Form11 : Form
    {
        Context db;
        public Form11(int orderId)
        {
            InitializeComponent();
            db = new Context();
            OrderId = orderId;
            DataTable dt = new DataTable();
            dt.Columns.Add("Id", typeof(Int32));
            dt.Columns.Add("Value", typeof(String));
            foreach (Sellers s in db.Sellers.ToList())
            {
                DataRow row = dt.NewRow();
                row["Id"] = s.Id;
                row["Value"] = s.SSurname + " " + s.SName + " " + s.SPatronymic;
                dt.Rows.Add(row);
            }
            comboBox1.DataSource = dt;
            comboBox1.ValueMember = "Id";
            comboBox1.DisplayMember = "Value";
        }
        public int OrderId = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            int sellerId = 0;
            int.TryParse(comboBox1.SelectedValue.ToString(), out sellerId);
            Order order = db.Order.FirstOrDefault(o => o.Id == OrderId);
            Sellers seller = db.Sellers.FirstOrDefault(s => s.Id == sellerId);
            order.Sellers = seller;
            order.Status = "Заказ утверждён";
            db.Entry(order).State = EntityState.Modified;
            db.SaveChanges();
        }
    }

И получается что вот без этого куска куда:

Order ord = db.Order.FirstOrDefault(o => o.Id == OrderId);
                if(ord.Status != "Заказ утверждён")

На 10 форме в событии

dataGridView1_CellClick

всё работает как должно. Подскажите пожалуйста, в чём может быть проблема? Не как не могу понять.

READ ALSO
Логирование в файл

Логирование в файл

Сейчас я выполняю логирование в debug строкой LogManagerGetLog = type => new DebugLog(type); в файле App

163
Фильтрация ListBox

Фильтрация ListBox

Есть ListBox и TextBox, первый подвязан под ObservableCollection<Adress>, где Adress -

145
Как правильно конвертировать byte[] в строку (ASCII Рус. символы)?

Как правильно конвертировать byte[] в строку (ASCII Рус. символы)?

Например следующий код должен возвращать строку "Г":

157
Адаптив для google adsense

Адаптив для google adsense

На сайте выводится реклама adsense, но на маленьких экранах от 320px часть рекламы скрытаПодскажите, как сделать адаптив для маленьких экранов?

187