Привязать 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 для генерации команд базы данных по мере необходимости при обновлении данных. (Когда вы создаете конструктор команд, он подключается к адаптеру данных, который вы передаете в конструктор. Вот как адаптер может впоследствии генерировать нужные ему команды.)
