Коллеги, подскажите, пожалуйста.
Вопрос по работе с БД. Использую DataSet. Есть три таблицы: "люди", "группы", и связующая таблица "многие ко многим", обозначающая принадлежность людей группе. На форме находятся три DataGridView для каждой таблицы соответственно.
Нужно отобразить таблицу связи не по ID, а сделать подстановку имен, кроме этого взять из основных таблиц дополнительные поля, телефон, например. Сейчас заполняю DataTable связующей таблицы своим SELECT, который получает как столбцы имён, так и телефонов.
Всё хорошо, но при изменении имён в основных таблицах, в таблицу связи они не попадают по понятным причинам.
Нашел единственный способ — для каждого столбца-подстановки сделать тип ComboBox, и значения задать через него. Почему-то мне кажется, что это корявое решение, и я вообще чего-то не понял.
Подскажите, плизз.
Здравствуйте, Павел А.Ануфриков, Вы писали:
ПАА>Коллеги, подскажите, пожалуйста.
ПАА>Вопрос по работе с БД. Использую DataSet. Есть три таблицы: "люди", "группы", и связующая таблица "многие ко многим", обозначающая принадлежность людей группе. На форме находятся три DataGridView для каждой таблицы соответственно.
ПАА>Нужно отобразить таблицу связи не по ID, а сделать подстановку имен, кроме этого взять из основных таблиц дополнительные поля, телефон, например. Сейчас заполняю DataTable связующей таблицы своим SELECT, который получает как столбцы имён, так и телефонов.
Кратко: добавляем в DataSet связи, делаем вычисляемые поля.
Шаг первый. В DataSet делаете связи между таблицами. Например:
DataTable persons = ...; // Таблица людей
DataTable rel = ...; // Связующая таблица
dataSet.Relations.Add(
"RelToPerson", // Название связи
persons.Columns["Id"], // Поле - первичный ключ
rel.Columns["PersonId"]) // Поле - внешний ключ
Шаг второй. В связующую таблицу добавляете вычисляемые поля. Например:
rel.Columns.Add(
"PersonFIO", // Название вычисляемого поля
typeof(String), // Тип
"Parent(RelToPerson).FIO"); // Берём значение поля FIO у родительской записи по связи RelToPerson
Теперь в гриде помимо (или вместо) PersonId можно показывать PersonFIO.