Обновление данных в dataGridView

151
02 марта 2018, 13:54

Здравствуйте. Есть программа на win формах. На форме dataGridView. Используется база данных mssql. Модель базы создана с помощью code first. Вот мой класс(таблица):

class Systems
    {
        public int SystemsId { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Users> Users { get; set; }
    }

Вот как я добавляю в него данные.

private void button1_Click(object sender, EventArgs e)
        {
            using (Context db = new Context())
            {
                Systems system1 = new Systems { Name = "Система 5"};
                db.System.Add(system1);
                db.SaveChanges();
                this.systemsTableAdapter.Fill(this.myDbDataSet.Systems);
            }
        }

Строчка this.systemsTableAdapter.Fill(this.myDbDataSet.Systems); должна обновлять гриду после добавления. Но этого не происходит. Что я делаю не так? Подскажите пожалуйста.

Результат:

private void Form1_Load(object sender, EventArgs e)
        {
            using (Context db = new Context())
            { 
                dataGridView1.DataSource = db.System.ToList();
                dataGridView1.Refresh();
            }
        }
private void button1_Click(object sender, EventArgs e)
        {
            using (Context db = new Context())
            {
                Systems system1 = new Systems { Name = "Система 7"};
                db.System.Add(system1);
                db.SaveChanges();
                dataGridView1.DataSource = db.System.ToList();
                dataGridView1.Refresh();
            }
        }
Answer 1

Тут у вас перемешка ADO и Entity, что в данном контексте не самое лучшее. Каким образом у вас строится связь с datagridview? Если через dbDataAdapter, то зачем? Это же Entity, а не Ado. Достаточно было бы привязать напрямую к списку System:

List<System> lst = db.System.ToList();
dataGridView.DataSource = lst;

При изменении System делай Refresh или Update dataGridView:

using (Context db = new Context())
        {
            Systems system1 = new Systems { Name = "Система 5"};
            db.System.Add(system1);
            db.SaveChanges();
            dataGridView.Refresh();
        }

P.S. System - очень плохое имя для таблицы(да и вообще для чего либо), т.к. пространство имен уже зарезервировано с этим именем в C#. Если по контексту таблица связана с какими то системами, то лучше что то дописать. GameSystem, PictureSystem и т.д.

Попробуй так:

BindingList<System> lst;
private void Form1_Load(object sender, EventArgs e)
    {
        using (Context db = new Context())
        { 
            List<System> dbList = db.System.ToList();
            lst = new BindingList<System>(dbList);
            dataGridView1.DataSource = lst;
            dataGridView1.Refresh();
        }
    }
private void button1_Click(object sender, EventArgs e)
    {
        using (Context db = new Context())
        {
            Systems system1 = new Systems { Name = "Система 7"};
            db.System.Add(system1);
            db.SaveChanges();
        }
    }
READ ALSO
ASP.NET Core проблема с асинхронными запросами в базу данных

ASP.NET Core проблема с асинхронными запросами в базу данных

У меня возникла проблема с выполнением асинхронных запросов к базу данных при использовании Entity FrameworkКогда я пытаюсь получить какое - либо...

134
Синхронизация nullable переменной между потоками

Синхронизация nullable переменной между потоками

Имеется nullable переменная, к которой требуется доступ из разных потоковНапример, int?

120
Путаница в IPv6 локальных адресах

Путаница в IPv6 локальных адресах

Есть один сетевой адаптер, мне нужно узнать его локальный IPv6, для отправки запросов с сокета (сокет в режиме DualMode) через этот IP

128