Тема: DataGridView Вставити в запис кілька таблиць
Намагаюся налаштувати роботу з таблицями зв'язаними як один до багатьох
(База даних SQLite)
Вдалося зробити коректне відображення таблиць за допомогою класу DataRelation, але з додаванням нових записів є така проблеми: При створенні нового рядка залежність між новими рядками таблиць пропадає, тобто поле зв'язку (батьківське id) зберігається як NULL
Команда для оновлення яка використовуються:
dataAdapter_ChannelList.UpdateCommand = new SQLiteCommandBuilder(dataAdapter_ChannelList).GetUpdateCommand();
dataAdapter_ChannelName.UpdateCommand = new SQLiteCommandBuilder(dataAdapter_ChannelName).GetUpdateCommand();
Як зробити збереження таблиць які з'єднані зв'язком один до багатьох ?
Завантаження таблиць (для демонстрації, викликається при створені вікна)
ds = new DataSet();
dataAdapter_ChannelList = new SQLiteDataAdapter("SELECT * FROM ChannelList", DB.SingleObject.connection);
dataAdapter_ChannelList.Fill(ds, "ChannelList");
dataAdapter_ChannelName = new SQLiteDataAdapter("SELECT * FROM ChannelName", DB.SingleObject.connection);
dataAdapter_ChannelName.Fill(ds, "ChannelName");
DataRelation dataRelation = new DataRelation(
"ChannelList_ChannelName",
ds.Tables["ChannelList"].Columns["id"],
ds.Tables["ChannelName"].Columns["ChannelListID"]
);
ds.Relations.Add(dataRelation);
BindingSource bindingSource_ChannelList = new BindingSource();
BindingSource bindingSource_CL_CN = new BindingSource();
bindingSource_ChannelList.DataSource = ds;
bindingSource_ChannelList.DataMember = "ChannelList";
bindingSource_CL_CN.DataSource = bindingSource_ChannelList;
bindingSource_CL_CN.DataMember = "ChannelList_ChannelName";
dataAdapter_ChannelList.UpdateCommand = new SQLiteCommandBuilder(dataAdapter_ChannelList).GetUpdateCommand();
dataAdapter_ChannelName.UpdateCommand = new SQLiteCommandBuilder(dataAdapter_ChannelName).GetUpdateCommand();
dataGridView_GroupNames.DataSource = bindingSource_ChannelList;
dataGridView_ChannelNames.DataSource = bindingSource_CL_CN;
Збереження / оновлення таблиць (викликається при натискні кнопки зберегти)
private void Save()
{
dataAdapter_ChannelList.Update(ds.Tables["ChannelList"]);
dataAdapter_ChannelName.Update(ds.Tables["ChannelName"]);
}
Ось так виглядають таблиці