none
Как вывести данные в DataGridView из 2-х связанных таблиц в БД? RRS feed

  • Вопрос

  • Здравствуйте!

    Разрабатываю приложение в среде VS, язык С#, встраиваемая база данных Firebird Embedded.

    Не получается корректно вывести данные в DataGridView из 2-х связанных таблиц в БД (DataGridView должно отображать выборочно столбцы из двух связанных таблиц). Подскажите, пожалуйста,  как быть в следующей ситуации.

    В БД есть две таблицы: CONTRACTS и CLIENTS.

    Таблица CONTRACTS содержит поля (RECID (Primary Key), NUMBER_CONTRACT,  PRICE, REGISTRATION_DATE, CLIENTID (Foreign Key), SAMPLE_QUANTITY)

    Таблица CLIENTS содержит поля (RECID (Primary Key), NAME_COMPANY, PHONE, EMAIL, и т.д.)

    Эти две таблицы связаны следующим образом:

    CLIENTS.RECID (Primary Key) = CONTRACTS.CLIENTID (Foreign Key)

    В таблицу DataGridView необходимо вывести следующие поля:

    CONTRACTS. NUMBER_CONTRACT

    CONTRACTS. REGISTRATION_DATE

    CONTRACTS. PRICE

    CLIENTS. NAME_COMPANY

    CONTRACTS.SAMPLE_QUANTITY

    В коде прописываю следующим образом:

    myConnection.Open();
    OleDbTransaction trans = myConnection.BeginTransaction();
    cmd.Transaction = trans;
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    cmd.CommandText = @"SELECT * FROM "" CONTRACTS""";
    da.Fill(this. dataSet, "CONTRACTS"); 
    cmd.CommandText = @"SELECT * FROM ""CLIENTS""";
    da.Fill(this. dataSet, "CLIENTS");
    //Создание новой связи
    DataRelation ContractClient = new DataRelation("ContractClient", this. dataSet.Tables["CLIENTS"].Columns["RECID"], this. dataSet.Tables["CONTRACTS"].Columns["CLIENTID"]);
    this. dataSet.Relations.Add(ContractClient);
    trans.Commit();
    //Вывод данных в DataGridView (связывание)
    dataGridView.DataSource = null;
    this.bindingSource.DataSource = this.dataSet.Tables["CONTRACTS"]; 
    this.bindingNavigator.BindingSource = this.bindingSource3;
    dataGridView.DataSource = this.bindingSource;
    

    В результате в DataGridView в поле CLIENTID вторичный ключ (номера записей). Каким образом нужно указать, что вместо этого поля CLIENTID следует вывести одно (в данном случае CLIENTS.NAME_COMPANY) или несколько полей из таблицы CLIENTS???

    Заранее спасибо всем ответившим.

    • Перемещено Siddharth Chavan 1 октября 2010 г. 22:40 MSDN Forums Consolidation (От:Visual C#)
    4 января 2010 г. 17:15

Ответы

  • Попробуйте так.
    1.Создайте DataAdapter c select с join двух таблиц, и все поля, которые необходимы укажите в select.
    и присоединяйте к гриду.
    или
    2.Создайте вьюху.

    • Предложено в качестве ответа I.Vorontsov 11 января 2010 г. 11:35
    • Помечено в качестве ответа I.Vorontsov 14 января 2010 г. 7:35
    6 января 2010 г. 11:01