Имеется два элемента 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 файле;
Проблему решил обновлением команды. После вызова функции insertNewMenu() команда осталась основанной на INSERT INTO, но мне же нужно было вывести содержимое новой таблицы, значит надо было потом обновить команду на SELECT. Глупая ошибка.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости