PDA

Показать полную графическую версию : [решено] Подстановочная привязка данных (VS2010, Entity, WinForms)


Sidewalker
07-05-2012, 11:48
Всем доброго времени суток. Накопилась пара вопросов. Помогите пожалуйста.

1) Вот тут вот http://msdn.microsoft.com/ru-ru/library/ms233685.aspx написано "3. Замените тип передачи дочерней таблицы на Сведения, выбрав пункт Сведения из списка элементов управления в узле дочерней таблицы."
Я совершенно не понял как это сделать.. Если раскрыть выпадающий список (кнопка справа от имени узла-таблицы), то у меня там только DataGridView (оно и выбрано), Таблица, Нет.


2) К чему вообще такие вопросы - к тому, что есть у меня простенькая бд из 2х таблиц, ну классическое заказы-клиенты (клиенты главная, у клиента может быть несколько заказов, в заказе только один клиент), и есть прога WinForms с двумя вкладками - клиенты и заказы. С клиентами я разобрался, всё нормально. А вот на вкладке заказы тоже должен быть DataGridView, в котором (!) столбцы Service (текстовое поле из Orders), Status (bool-поле из Orders), FIO (фио клиента, вот тут самая главная загвоздка - мне надо чтобы оно автоматически* подставлялось туда на основании поля-связи ClientsClientsID из строки таблицы Orders). Как я понял информация из ссылки пункта 1 и вообще из той сферы должна в этой задаче помочь..

список полей в таблице Clients: int ClientsID, string FIO, и другие.
список полей в таблице Orders: int OrderID, datetime (по сути DateTime) Date, int ClientsClientsID (сгенерировалось при создании связи в конструкторе модели БД), bit (по сути bool) Status, string Service.

*интересует именно автоматическая подстановка. Могу конечно создать дополнительный несвязанный столбец и руками заполнять каждую ячейку, но при этом теряется возможность сортировки по щелчку на заголовке столбца и другие фишки, поэтому не хочу этот способ использовать, нужно автоматически.

Sidewalker
07-05-2012, 19:05
Проблема решена.

На всякий случай объясню поподробнее если кому понадобится:

В окне Источники данных правой кнопкой на созданном вами наборе данных (он должен включать ОБЕ таблицы, или если у вас их больше двух, то все таблицы, данные из которых нужны, это можно изменить кликнув правой кнопкой и выбрав Настроить источник данных с помощью мастера) - Изменить набор данных в конструкторе - Правой кнопкой на строке (по сути это сам SQL-запрос как я понял) "Fill,GetData ()" (или как вы там их назвали) - Настроить - И дописываем туда что вам нужно. Для себя я написал так:

SELECT OrderSet.OrderID, OrderSet.Date, OrderSet.ClientsClientsID, OrderSet.Status, OrderSet.Service, ClientsSet.FIO
FROM OrderSet INNER JOIN
ClientsSet ON OrderSet.ClientsClientsID = ClientsSet.ClientsID

Это выбирает из набора данных OrderSet (ну из связанной с ним таблицы базы данных) поля OrderID, Date, ClientsClientsID, Status, Service, и из набора ClientsSet поле FIO, причём FIO выбирается на основании правила OrderSet.ClientsClientsID = ClientsSet.ClientsID (т.е. по правилу "ID-ключ клиента совпадает с таким ключом, записанном в данном заказе").

Потом выделить щелчком левой кнопки мыши в конструкторе вашего окна программы таблицу, нажать на маленькую стрелочку вправо, там выбрать Другие источники данных - Источники данных проекта - DataSetX (ваш набор данных) - OrderSet (ваша таблица, которая должна быть выведена в этот DataGridView).




© OSzone.net 2001-2012