Не обновляется элемент dataGridView после запроса INSERT INTO

299
04 июня 2017, 17:24

Имеется два элемента dataGridView и две таблицы в БД. Из одного элемента(таблицы) нужно перенести выбранную строку в другой элемент(таблицу). При этом перенос работает, если после переноса проверить содержимое второй таблицы, то там будет добавленный недавно элемент. Но не смотря на это, dataGridView для второй таблицы не обновляется. Хотя, после загрузки формы, оба dataGridView элемента заполняются корректно.

Заполнение всех двух элементов при загрузке формы работает:

private void LunchForm_Load(object sender, EventArgs e)
    {
        connection.Open();
        string query = "SELECT * FROM [Меню блюд]";
        command = new OleDbCommand(query, connection);
        command.ExecuteNonQuery();
        OleDbDataAdapter allAdapter = new OleDbDataAdapter(command);
        DataTable allDataTable = new DataTable();
        allAdapter.Fill(allDataTable);
        dataGridViewAll.DataSource = allDataTable;
        deleteNewMenu();
        query = "SELECT * FROM [Обеденное меню]";
        command = new OleDbCommand(query, connection);
        command.ExecuteNonQuery();
        OleDbDataAdapter newMenuAdapter = new OleDbDataAdapter(command);
        DataTable newMenuDataTable = new DataTable();
        newMenuAdapter.Fill(newMenuDataTable);
        dataGridViewNewMenu.DataSource = newMenuDataTable;
        connection.Close();
    }

Функция добавления из одного элемента в другой, которая вызывается при нажатии кнопки:

private void buttonAdd_Click(object sender, EventArgs e)
    {
        connection.Open();
        for (int i = 0; i < this.dataGridViewAll.RowCount - 1; i++)
        {
            if (dataGridViewAll.Rows[i].Selected || dataGridViewAll.Rows[i].Cells[1].Selected)
            {
                addToNewMenu(i);
            }
        }
        connection.Close();
    }

Содержимое функции addToNewMenu():

private void addToNewMenu(int index)
    {
        insertNewMenu(dataGridViewAll.Rows[index].Cells[1].Value.ToString(), dataGridViewAll.Rows[index].Cells[2].Value.ToString());
        OleDbDataAdapter newMenuAdapter = new OleDbDataAdapter(command);
        DataTable newMenuDataTable = new DataTable();
        dataGridViewNewMenu.DataSource = newMenuDataTable;
        dataGridViewNewMenu.Refresh();
        newMenuAdapter.Fill(newMenuDataTable);
    }

Содержимое функции insertNewMenu()

private void insertNewMenu(string name, string value)
    {
        string query = "INSERT INTO [Обеденное меню] ([Наименование блюда], [Категория]) VALUES ('" + name + "', '" + value + "')";
        command = new OleDbCommand(query, connection);
        command.ExecuteNonQuery();
    }

Строка подключения БД (прописана в конструкторе):

        connection = new OleDbConnection();
        connection.ConnectionString = @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\Vladislav\Desktop\RGZ\database.mdb; User Id = admin; Password =;";

П.С. Пишу в VS 15, БД в локальном .mdb файле;

Answer 1

Проблему решил обновлением команды. После вызова функции insertNewMenu() команда осталась основанной на INSERT INTO, но мне же нужно было вывести содержимое новой таблицы, значит надо было потом обновить команду на SELECT. Глупая ошибка.

READ ALSO
Переместить объект в окне программно WPF

Переместить объект в окне программно WPF

Можно ли переместить объект программно, не применяя ThicknessAnimation и подобные классы?

275
Проект asp.mvc не загружает изображения

Проект asp.mvc не загружает изображения

Столкнулся с проблемой на ровном месте: Мне нужно вывести на страницу графикГрафик я формирую с помощью System

310
Prop type `children` is invalid; it must be a function, usually from React.PropTypes

Prop type `children` is invalid; it must be a function, usually from React.PropTypes

Использую Gatsby js версии 10 для своего приложения

530
Событие scroll : jquery

Событие scroll : jquery

Имеется блок header, и при скролле, когда header уже не видно, нужно сделать header фиксированным, чтобы его было постоянно видноЯ решил это так:

329