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

Источник: http://csharphelper.com/blog/2014/11/bind-a-datagrid-to-a-dataset-holding-multiple-tables-at-runtime-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector