Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Отобразить в dataGridView1 связные таблицы . . .  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1072
Можно ли такое сделать:

Есть в БД две таблицы: "table1" и "table2".
______________________________________
"table1" содержит поля
id - аутоинкремент
id_table2 - связь с таблицей "table2"

"table2" содержит поля
id - аутоинкремент
name - текстовое поле, которое надо отобразить в Гриде вместо поля "id_table2" из "table1"
______________________________________


D "dataGridView1" на форме отображается таблица "table1" , но вместо поля "id_table2" нужно отбразить поле "name" таблицы "table2".
Возможно ли такое ???

Заранее спасибо всем откликнувшимся !!!
9 сен 08, 09:53    [6161693]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить в dataGridView1 связные таблицы . . .  [new]
WYPMAH
Member

Откуда: USA
Сообщений: 1956
potkin

да, написать запрос на выборку из 2х связанных таблиц/создать вьюху.

например, так:
select
    t2.name
from
    table1 t1,
    table2 t2
where
    t2.id = t1.id_table2
9 сен 08, 11:36    [6162490]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить в dataGridView1 связные таблицы . . .  [new]
chpasha
Member

Откуда:
Сообщений: 10035
смотри DataRelation и DataColumn.Expression (выражения Parent, Child)
9 сен 08, 12:18    [6162886]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить в dataGridView1 связные таблицы . . .  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1072
Интерестно как сохранить введённые данные в Грид в таблицу table1 ???




Код отображения таблицы:
            //Считываем данные с таблицы table1 
            selectDocuments_source = "select    t2.name    from    table1 t1,    table2 t2   where    t2.id = t1.id_table2";
            adapterDocuments_source = new SqlDataAdapter(selectDocuments_source, conn);
            builderDocuments_source = new SqlCommandBuilder(adapterDocuments_source);
            builderDocuments_source.RefreshSchema();
            tableDocuments_source = new DataTable();
            adapterDocuments_source.Fill(tableDocuments_source);
            dGSource.DataSource = tableDocuments_source;

Код сохранения:

 adapterDocuments_source.Update(tableDocuments_source);
9 сен 08, 13:45    [6163606]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить в dataGridView1 связные таблицы . . .  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1072
>>> смотри DataRelation и DataColumn.Expression (выражения Parent, Child)

Какого контрола ??? , если не секрет :-)
У датаГрида нет таких свойств . . .
9 сен 08, 13:55    [6163681]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить в dataGridView1 связные таблицы . . .  [new]
WYPMAH
Member

Откуда: USA
Сообщений: 1956
potkin

читаем МСДН:
автор
Automatically generates single-table commands that are used to reconcile changes made to a DataSet with the associated SQL Server database.
9 сен 08, 13:57    [6163701]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить в dataGridView1 связные таблицы . . .  [new]
WYPMAH
Member

Откуда: USA
Сообщений: 1956
potkin
У датаГрида нет таких свойств . . .

DataRelation это класс описывающие parent/child отношения между таблицами.

пример:
private void CreateRelation() 
{
    // Get the DataColumn objects from two DataTable objects 
    // in a DataSet. Code to get the DataSet not shown here.
    DataColumn parentColumn = 
        DataSet1.Tables["Customers"].Columns["CustID"];
    DataColumn childColumn = 
        DataSet1.Tables["Orders"].Columns["CustID"];
    // Create DataRelation.
    DataRelation relCustOrder;
    relCustOrder = new DataRelation("CustomersOrders", 
        parentColumn, childColumn);
    // Add the relation to the DataSet.
    DataSet1.Relations.Add(relCustOrder);
}
9 сен 08, 13:59    [6163721]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить в dataGridView1 связные таблицы . . .  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1072
Заменим:
table1 -> source (id, name)
table2 -> documents_source (id, id_source)

и надо отобразить в Гриде таблицу "documents_source", но вместо поля "id_source" поле "name" таблицы "source".

Ну и код:

            strCommand = "SELECT id, name FROM source";
            myData = new SqlDataAdapter(strCommand, myConn);
            myData.Fill(DataSet1, "source");

            strCommand = "SELECT id, id_source, id_documents FROM documents_source where id_documents=1";
            myData.SelectCommand.CommandText = strCommand;
            myData.Fill(DataSet1, "documents_source");

            parentColumn = DataSet1.Tables["source"].Columns["id"];
            childColumn = DataSet1.Tables["documents_source"].Columns["id_source"];
            rel = new DataRelation("s_d", parentColumn, childColumn);
            DataSet1.Relations.Add(rel);

            builderDocuments_source = new SqlCommandBuilder(myData);
            builderDocuments_source.RefreshSchema();

            DataGrid1.DataSource = DataSet1.(???????????????)

ПОЖАЛУЙСТА подскажите: Правельный ли код ??? И что надо записать вместо "(???????????????)"
10 сен 08, 13:11    [6168482]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить