Привязать DataGrid к набору данных, содержащему несколько таблиц во время выполнения в C#
В этом примере показано, как можно привязать элемент DataGrid к DataSet, загруженному из файла MDB во время выполнения. Когда форма загружается, следующий код создает DataSet и связывает его с элементом управления DataGrid формы.
// DataAdapters и DataSet. private OleDbDataAdapter DaAddresses, DaTestScores; private DataSet DsContacts; private void Form1_Load(object sender, EventArgs e) { const string SELECT_ADDRESSES = "SELECT * FROM Addresses"; const string SELECT_TEST_SCORES = "SELECT * FROM TestScores"; // Получить имя файла базы данных. // Предполагается, что база данных находится в исполняемом каталоге. string db_name = Application.StartupPath + "\\Contacts.mdb"; // Составьте строку подключения. string connect_string = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + db_name + ";" + "Persist Security Info=False"; // Создаем DataAdapter для загрузки таблицы адресов. DaAddresses = new OleDbDataAdapter(SELECT_ADDRESSES, connect_string); // Создаем DataAdapter для загрузки таблицы адресов. DaTestScores = new OleDbDataAdapter(SELECT_TEST_SCORES, connect_string); // Создаем и заполняем DataSet. DsContacts = new DataSet("ContactsDataSet"); DaAddresses.Fill(DsContacts, "Addresses"); DaTestScores.Fill(DsContacts, "TestScores"); // Свяжите DataGrid с DataSet. dgContacts.DataSource = DsContacts; }
В коде содержится строка подключения к базе данных, а затем создается два объекта OleDbDataAdapter для выбора данных из таблиц Адреса и TestScores базы данных. Он создает новый DataSet и использует адаптеры данных для загрузки своих таблиц в него. Наконец, код устанавливает свойство DataGrid элемента управления DataSource в DataSet. DataGrid автоматически позволяет пользователю открыть таблицу и изменить их значения.
Обратите внимание, что это не работает с элементом управления DataGridView. DataGrid более мощный. Он не только может отображать таблицу с несколькими таблицами DataSet, но также позволяет пользователю перемещаться между таблицами, если они связаны с отношениями внешнего ключа. (Я продемонстрирую это в другом посте.)
Когда пользователь закрывает форму, следующий код сохраняет любые изменения в данных обратно в базу данных.
// Сохранение изменений в данных. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Используйте CommandBuilder для создания INSERT, // UPDATE и DELETE при необходимости. OleDbCommandBuilder command_builder; command_builder = new OleDbCommandBuilder(DaAddresses); command_builder = new OleDbCommandBuilder(DaTestScores); // Обновление базы данных. try { DaAddresses.Update(DsContacts, "Addresses"); DaTestScores.Update(DsContacts, "TestScores"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Этот код создает два объекта OleDbCommandBuilder для генерации команд базы данных по мере необходимости при обновлении данных. (Когда вы создаете конструктор команд, он подключается к адаптеру данных, который вы передаете в конструктор. Вот как адаптер может впоследствии генерировать нужные ему команды.)